2012-12-27 41 views
1

總體目標是防止美國電話號碼中的重複數字相同。 請參見下面的示例數據:防止在XSD模式驗證中重複n次相同的數字

  • 0000000000 - 不合法的
  • 7777777777 - 不合法的
  • 9549867899 - 合法
  • 3051234567 - 合法

我想使用正則表達式模式中XSD驗證。特別是,負向預測方法。 不幸的是,XML Schema(XSD)正則表達式是有限的。 下面的正則表達式^(?!(\d)\1{9,})做這項工作在其他地方,但不是在XSD架構工作。

回答

2

XSD架構有自己相當的限制正則表達式方言不包括前瞻。

我能想到這樣做的唯一方法是相當笨拙

0[0-9-[0]]|1[0-9-[1]]|2[0-9-[2]]|3[0-9-[3]]|.... 

其成功只有在字符串中包含對不同數字。

+0

我不明白爲什麼正確的手機#沒有通過建議的解決方案進行驗證。 正在運行自定義驗證引擎Saxonica 9.4.0.6驗證程序... ANIZeros.xml中第8行第24列上/ root [1]/r [1]/ANI [1]處的驗證錯誤: 內容「3051234567」元素與所需的簡單類型不匹配。值 「3051234567」 違反了圖案刻面 「0 [0-9- [0]] | 1 [0-9- [1]] | 2 [0-9- [2 ...」 元素的 類型的ANI(請參閱http://www.w3.org/TR/xmlschema11-2/#cvc-datatype-valid第1章) –

+0

Java內置驗證(Xalan Java 2.7.0)。 文件:/// d:/Temp/QuickWins/IDT/ANIZeros.xml:8,24:(錯誤)CVC-圖案有效:值 '3051234567' 不是小面有效的相對於模式「0 [O- 9- [0]] | 1 [0-9- [1]] | 2 [0-9- [2]] | 3 [0-9- [3]] | 4 [0-9- [4]] | 5 [0-9- [5]] | 6 [0-9- [6]] | 7 [0-9- [7]] | 8 [0-9- [8]] | 9 [0-9 - [9]]'爲類型'#AnonType_ANI'。 文件:/// d:/Temp/QuickWins/IDT/ANIZeros.xml:19,24:(錯誤)CVC-圖案有效:值 '0000000000' 不是小面有效的相對於模式「0 [O- 9- [0]] | 1 [0-9- [1]] | 2 [0-9- [2]] | 3 [0-9- [3]] | 4 [0-9- [4]] | 5 [0-9- [5]] | 6 [0-9- [6]] | 7 [0-9- [7]] | 8 [0-9- [8]] | 9 [0-9 - [9]]'爲類型'#AnonType_ANI'。 –

+0

對不起,XSD正則表達式被隱式錨定,因此您需要在模式的開始和結尾處添加。*(或[0-9] *)。 –