我在XSD模式中遇到负向前瞻问题。 当我指定:
<xs:pattern value="^(?!(00|\+\d))\d{6,}$"/>
然后我收到一条错误消息:
Value '^(?!(00|\+\d))\d{6,}$' is not a valid XML regular expression.
知道为什么它不起作用?
在在线javascript验证器中,它工作正常(例如,在单元测试部分here点击“运行测试”)。
我需要验证电话号码。电话号码不能包含国际前缀(+ \ d)和(00)。
由于
答案 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
等反向引用。