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.