如何使用XML Schema中的xs:restriction结合正则模式进行XSD约束?
- 内容介绍
- 相关推荐
本文共计841个文字,预计阅读时间需要4分钟。
在XML Schema(XSD)中,``元素使用的确实是XPath 2.0的正则子集。它不支持`\d`、`\w`等转义字符,也不支持量词(如`+`、`*`、`?`等)。此外,``元素内不应直接使用量词,除非是在``元素内部显式启用`flags`属性。
- 必须用
[0-9]替代\d,[a-zA-Z]替代\w - 量词只认
*(0次或多次)、+(1次或多次)、?(0或1次)、{n}、{n,}、{n,m}—— 但某些老解析器(如 .NET 4.0 前的 XmlSchemaSet)会忽略{n,m} - 锚定行为特殊:pattern 默认是“全字符串匹配”,不需要显式加
^和$;加了反而可能出错
多个 xs:pattern 会做逻辑 AND,不是 OR
一个 xs:restriction 下写多个 xs:pattern,表示“必须同时满足所有正则”,不是“满足任一即可”。比如限制邮箱既要含 @,又要以 .com 结尾,两个 pattern 都得通过。
本文共计841个文字,预计阅读时间需要4分钟。
在XML Schema(XSD)中,``元素使用的确实是XPath 2.0的正则子集。它不支持`\d`、`\w`等转义字符,也不支持量词(如`+`、`*`、`?`等)。此外,``元素内不应直接使用量词,除非是在``元素内部显式启用`flags`属性。
- 必须用
[0-9]替代\d,[a-zA-Z]替代\w - 量词只认
*(0次或多次)、+(1次或多次)、?(0或1次)、{n}、{n,}、{n,m}—— 但某些老解析器(如 .NET 4.0 前的 XmlSchemaSet)会忽略{n,m} - 锚定行为特殊:pattern 默认是“全字符串匹配”,不需要显式加
^和$;加了反而可能出错
多个 xs:pattern 会做逻辑 AND,不是 OR
一个 xs:restriction 下写多个 xs:pattern,表示“必须同时满足所有正则”,不是“满足任一即可”。比如限制邮箱既要含 @,又要以 .com 结尾,两个 pattern 都得通过。

