我们正在使用JAXB 1.0.6(该项目已经开始使用JDK1.4,这是最后一个兼容版本)来从XSD规范创建XML文件。 XSD使用以下正则表达式模式定义属性“email”。
<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满足表达式。如果省略下划线,验证将成功通过。为什么会这样?
此致
答案 0 :(得分:2)
嗯。为什么期望\w
等同于[a-zA-Z0-9_]
?
您是否尝试将\w
替换为表达式?
乍一看XML schema (search for \w
)将\w
定义为
除“标点符号”,“分隔符”和“其他”字符
之外的所有字符
[由Unicode定义]
和Unicode seems将下划线定义为标点符号(在链接文档中搜索\p{P}
)。