使用正则表达式验证json

时间:2014-11-10 06:13:20

标签: regex json xsd

我想使用模式

在xsd中使用regex验证json
<xs:simpleType name="json">
    <xs:restriction base="xs:string">
      <xs:pattern value='/\A("([^"\\]*|\\["\\bfnrt\/]|\\u[0-9a-f]{4})*"|-?(?=[1-9]|0(?!\d))\d+(\.\d+)?([eE][+-]?\d+)?|true|false|null|\[(?:(?1)(?:,(?1))*)?\s*\]|\{(?:\s*"([^"\\]*|\\["\\bfnrt\/]|\\u[0-9a-f]{4})*"\s*:(?1)(?:,\s*"([^"\\]*|\\["\\bfnrt\/]|\\u[0-9a-f]{4})*"\s*:(?1))*)?\s*\})\Z/is'/>
    </xs:restriction>
</xs:simpleType>

但xs:pattern不支持(?1)。请帮忙

1 个答案:

答案 0 :(得分:2)

由于XSD模式不支持递归正则表达式(?1),因此您应该甚至不尝试以其微弱的正则表达式支持进行验证。这根本不可能,任何编写正则表达式的尝试都不会正确验证所有输入。

我建议JSON的验证是单独完成的,可能是使用JSON解析库,或者是在正则表达式引擎支持递归正则表达式的环境中。