XSD中的pattern是xs:restriction的facet,用于正则约束简单类型内容,自动全匹配、不支持/d等简写及高级特性,多pattern为逻辑或,需注意转义与工具验证。

XSD 中的 pattern 用于对元素或属性的文本内容施加正则表达式约束,它属于 xs:restriction 的一种 facet(面),必须配合简单类型(如 xs:string)使用。写法不难,但细节容易出错——关键是正则语法受 XML Schema 规范限制,不是所有 JavaScript 或 Java 正则都适用。
pattern 的基本写法和位置
pattern 必须出现在 xs:simpleType 的 xs:restriction 内,不能直接用在元素定义里(除非内联定义类型)。它的值是一个字符串,表示一个正则表达式,且默认是“全匹配”语义:整个内容必须完全匹配该模式,不需要显式加 ^ 和 $(XSD 自动隐含锚定)。
- 正确写法示例(限制手机号为 11 位数字):
- 错误写法(加了 ^$):
(虽然多数处理器容忍,但不符合规范,不推荐) - 多个 pattern 可并列,表示“满足任一即可”(逻辑或),不是“且”
支持的正则语法要点
XSD 基于 XML Schema Part 2 规范,使用的是简化版的正则(类似 Perl 5 子集),但不支持很多常见扩展:
- 不支持
/d、/w、/s等简写,必须写成[0-9]、[a-zA-Z0-9_]、[ /t/n/r] - 不支持前瞻(
?=)、后瞻(?)、非捕获组((?:...))等高级特性 - 支持基本元字符:
.(匹配任意字符,包括换行?注意:XSD 默认.不匹配换行符)、*、+、?、{n,m}、[...]、(...)、| - 字符类可嵌套和取反:
[a-z[0-9]](a–z 或数字),[^aeiou](非元音)
常见实用例子
写 pattern 要紧扣业务规则,避免过度复杂。几个高频场景参考:
-
邮箱(简易版,仅示意):
- 中国身份证号(18 位,最后一位可能是 X):
- 日期格式 YYYY-MM-DD(不校验有效性,仅格式):
- 非空且不含空白开头/结尾的字符串:
(注意:单字符也要匹配)
调试和注意事项
pattern 错误常导致验证静默失败或报难以理解的错误。建议:
