XML Regex - 否定匹配

时间:2016-07-18 11:59:26

标签: regex xml xsd

我在XSD模式中遇到负向前瞻问题。 当我指定:

<xs:pattern value="^(?!(00|\+\d))\d{6,}$"/>

然后我收到一条错误消息:

Value '^(?!(00|\+\d))\d{6,}$' is not a valid XML regular expression.

知道为什么它不起作用?

在在线javascript验证器中,它工作正常(例如,在单元测试部分here点击“运行测试”)。

我需要验证电话号码。电话号码不能包含国际前缀(+ \ d)和(00)。

由于

2 个答案:

答案 0 :(得分:2)

尝试以下正则表达式:

[1-9][0-9]{5,} | 0[1-9][0-9]{4,}

这匹配以零开头的数字,后跟任意数字(包括零)5次或更多次,并且它还匹配以零开头且的数字不后紧跟零,但之后可以有0-9。

答案 1 :(得分:0)

我会将删除的评论添加为答案:

([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位以上的任何数字。

此模式仅匹配一个完整/整个字符串,因为XSD pattern中的所有正则表达式模式都默认为锚定(因此,您不必也不能将模式包含在内^$)。

是的,在XSD正则表达式中没有外观支持(没有前瞻,也没有外观)。此外, XSD正则表达式还有其他有趣的限制/功能

  • ^$锚点
  • 非捕获组,如(?:...)(使用捕获组)
  • /不应转义,请勿使用\/
  • \d应写为[0-9],仅匹配ASCII数字(与.NET相同)
  • 不支持\1\2等反向引用。
  • 也不支持单词边界。

查看一些more XSD regex description at regular-expressions.info