2016-07-18 92 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