当XSD包含正则表达式字符类\ w时,任何人都会遇到JAXB验证的问题。

时间:2009-07-08 14:41:28

标签: xml regex xsd jaxb

我们正在使用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满足表达式。如果省略下划线,验证将成功通过。为什么会这样?

此致

1 个答案:

答案 0 :(得分:2)

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

乍一看XML schema (search for \w)\w定义为

  

除“标点符号”,“分隔符”和“其他”字符

之外的所有字符

[由Unicode定义]

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