java - XML 架构模式错误

标签 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: The value "H0" is not valid as facet for the pattern "^[a-zA-z][a-zA-Z0-9]*$" for the type nameType

我不明白为什么。在 RegExr 上使用它(/^[a-zA-z][a-zA-Z0-9]*$/gm),有效。我是否遗漏了模式规范中的某些内容?

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

最佳答案

您需要删除 ^$ 作为 XSD patterns被隐式锚定,^$ 未用作这些模式中的 anchor ,并修复 [a-zA-z] 中的拼写错误字符类,如果需要匹配任何ASCII字母,应该是[a-zA-Z](参见this related answer[A-z]不仅匹配ASCII字母).

使用

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

这个模式实际上会匹配下面的

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

关于java - XML 架构模式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47134570/

相关文章:

java - 我可以将 code_swarm 配置为只创建 png 文件而不显示吗?

Java Spring Rest 和 Swagger

java - 从 SPARQL 查询中仅获取 "#"之后的名称

jquery - 如何使 Recaptcha 成为 MVC 3 中的必填字段?

javascript - innerHTML 仅适用于某些功能

java - ClassNotFoundException LoginAction while hook 正在部署

regex - golang 正则表达式在字符串中查找 url

c# - 多个正则表达式数据注释验证

regex - OpenRefine 自定义文本分面

python - 检查列表是否是有效的 block 序列