2016-07-18 67 views
3

我在XSD模式排除模式的问题。 当我指定:XML正则表达式 - 否定匹配

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

然后我得到一个错误信息:

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

任何想法,为什么它不工作?

在网上的JavaScript验证它工作正常(在单元测试部分,点击例如here“运行测试”)。

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

由于

+1

XSD [不支持](http://www.regular-expressions.info/xml.html)lookaround。 – horcrux

+0

@horcrux谢谢,但它对我不好:D – peterko

+0

@horcrux,我在哪里可以找到XSD模式中不支持的内容? – peterko

回答

1

尝试使用以下正则表达式:

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

这许多这确实零开始,随后是任何数字(包括零)5次或更多次匹配,并且它也匹配一个以零开始的数字,并且是而不是之后立即跟着零,但之后可以有0-9。

+0

谢谢,它有帮助 – peterko

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正则表达式中没有lookaround支持(没有lookaheads,也没有lookbehinds)。此外,XSD正则表达式有其他有趣的局限性/功能

  • ^$
  • 非捕获组样(?:...)(使用捕捉那些代替)
  • /不应该逃脱,不要使用\/
  • \d应写为[0-9]只匹配ASCII数字(同英寸NET)
  • 不支持像\1\2等后向引用。
  • 也不支持任何单词边界。

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