XML 正则表达式 - 否定匹配
XML Regex - Negative match
我在 XSD 模式中遇到负先行问题。
当我指定:
<xs:pattern value="^(?!(00|\+\d))\d{6,}$"/>
然后我收到一条错误消息:
Value '^(?!(00|\+\d))\d{6,}$' is not a valid XML regular expression.
知道为什么它不起作用吗?
在在线 javascript 验证器中工作正常(例如 here 在单元测试部分下单击“运行 测试”)。
我需要验证 phone 个数字。 phone 号码不能包含国际前缀 (+\d) 和 (00)。
谢谢
试试下面的正则表达式:
[1-9][0-9]{5,} | 0[1-9][0-9]{4,}
这匹配一个不是以零开头且后跟任意数字(包括零)5 次或更多次的数字,它还匹配一个以零开头的数字并且 不是 紧跟零,但之后可以有 0-9.
我会将我删除的评论添加为答案:
([1-9][0-9]|[0-9][1-9])[0-9]{4,}
参见 the regex demo。
正则表达式应该适用于您的场景,因为
([1-9][0-9]|[0-9][1-9])
- 匹配 1-9
范围内的 1 个数字和之后的任何数字或 (|
) 任何 1 个数字后跟任何数字但 0
- 补2位
[0-9]{4,}
- 匹配 4 个或更多的任意数字。
这个模式只匹配 a full/entire string 因为 XSD pattern
中的所有正则表达式模式都默认锚定(所以,你做不必也不能用 ^
和 $
).
括起模式
是的,XSD 正则表达式不支持环视(没有 前瞻,也没有后视 )。此外,XSD 正则表达式还有其他有趣的 limitations/features:
^
和 $
锚
- 像
(?:...)
这样的非捕获组(改为使用捕获组)
/
不要转义,不要用\/
\d
应写成 [0-9]
以仅匹配 ASCII 数字(与在 .NET 中相同)
- 不支持像
</code>、<code>
这样的反向引用。
- 也不支持单词边界。
看到一些 more XSD regex description at regular-expressions.info.
我在 XSD 模式中遇到负先行问题。 当我指定:
<xs:pattern value="^(?!(00|\+\d))\d{6,}$"/>
然后我收到一条错误消息:
Value '^(?!(00|\+\d))\d{6,}$' is not a valid XML regular expression.
知道为什么它不起作用吗?
在在线 javascript 验证器中工作正常(例如 here 在单元测试部分下单击“运行 测试”)。
我需要验证 phone 个数字。 phone 号码不能包含国际前缀 (+\d) 和 (00)。
谢谢
试试下面的正则表达式:
[1-9][0-9]{5,} | 0[1-9][0-9]{4,}
这匹配一个不是以零开头且后跟任意数字(包括零)5 次或更多次的数字,它还匹配一个以零开头的数字并且 不是 紧跟零,但之后可以有 0-9.
我会将我删除的评论添加为答案:
([1-9][0-9]|[0-9][1-9])[0-9]{4,}
参见 the regex demo。
正则表达式应该适用于您的场景,因为
([1-9][0-9]|[0-9][1-9])
- 匹配1-9
范围内的 1 个数字和之后的任何数字或 (|
) 任何 1 个数字后跟任何数字但0
- 补2位[0-9]{4,}
- 匹配 4 个或更多的任意数字。
这个模式只匹配 a full/entire string 因为 XSD pattern
中的所有正则表达式模式都默认锚定(所以,你做不必也不能用 ^
和 $
).
是的,XSD 正则表达式不支持环视(没有 前瞻,也没有后视 )。此外,XSD 正则表达式还有其他有趣的 limitations/features:
^
和$
锚- 像
(?:...)
这样的非捕获组(改为使用捕获组) /
不要转义,不要用\/
\d
应写成[0-9]
以仅匹配 ASCII 数字(与在 .NET 中相同)- 不支持像
</code>、<code>
这样的反向引用。 - 也不支持单词边界。
看到一些 more XSD regex description at regular-expressions.info.