XML模式模式错误

时间:2017-11-06 10:18:14

标签: java regex validation xsd jaxb

我正在尝试编写XML架构。具体要求我验证一个字段,使其以字母开头,后跟字母数字字符(例如Foo3x4有效,3Foo或Foo3_不是)。

这就是我写它的方式:

<xsd:simpleType name="nameType">
    <xsd:restriction base="xsd:string">
        <xsd:pattern value="^[a-zA-z][a-zA-Z0-9]*$" />
    </xsd:restriction>
</xsd:simpleType>

但是,如果我尝试验证nameType为H0的文档,则会出现以下错误(由我翻译成英文):

  

cvc-pattern-valid:值&#34; H0&#34;无效作为模式的方面&#34; ^ [a-zA-z] [a-zA-Z0-9] * $&#34;对于类型nameType

我无法理解。在RegExr/^[a-zA-z][a-zA-Z0-9]*$/gm)上使用它可行。我在模式规范中遗漏了什么吗?

最后一个细节。验证错误由JAXB Java框架中的marshaller给出。

1 个答案:

答案 0 :(得分:2)

您需要删除^$,因为XSD patterns会隐式锚定,^$不会在这些模式中用作锚点,并且会修复[a-zA-z]字符类中的拼写错误,如果您需要匹配任何ASCII字母,则它应为[a-zA-Z](请参阅this related answer[A-z]不仅匹配ASCII字母)。< / p>

使用

<xsd:pattern value="[a-zA-Z][a-zA-Z0-9]*" />

此模式实际上与以下

匹配
  • 隐式匹配字符串的开头
  • [a-zA-Z] - 任何ASCII字母
  • [a-zA-Z0-9]* - 零个或多个ASCII字母和/或数字。
  • 隐式匹配字符串
  • 的结尾