1

我们正在使用 JAXB 1.0.6(该项目从 JDK1.4 开始,这是最后一个兼容版本)从 XSD 规范创建 XML 文件。XSD 使用以下正则表达式模式定义属性“电子邮件”。

<xs:simpleType name="EmailAddress">
    <xs:restriction base="xs:string">
        <xs:minLength value="0"/>
        <xs:maxLength value="60"/>
        <xs:pattern value="([\w%\.\-]+@[\w%\.\-]+\.[a-zA-Z]{2,6})?"/>
    </xs:restriction>
</xs:simpleType>

如果您尝试输入电子邮件 bla_bla@somewhere.com,验证将失败并显示以下消息:

    attribute "email" has a bad value: the value does not match the 
regular expression "([\w%\.\-]+@[\w%\.\-]+\.[a-zA-Z]{2,6})?

恕我直言,字符类 \w 相当于[a-zA-Z0-9_]

所以 bla_bla@somewhere.com 满足表达式。如果省略下划线,则验证将成功通过。为什么会这样?

问候

4

1 回答 1

3

唔。为什么你期望\w等于[a-zA-Z0-9_]?您是否尝试过用\w表达式替换?

乍一看,XML 模式(搜索\w定义\w

除“标点”、“分隔符”和“其他”字符集之外的所有字符

[由 Unicode 定义]

并且 Unicode似乎将下划线定义为标点符号(\p{P}在链接文档中搜索)。

于 2009-07-08T21:20:02.917 回答