XSD中的数字验证正则表达式

问题描述:

我需要能够验证数字和XSD如下所示: \ d {0,15}(。\ d \ d)?XSD中的数字验证正则表达式

因此,最多15个数字后跟一个可选的小数点后两位数。

美中不足的是,我希望它不会接受这些数字也:

0.00 
0 
00000 
000.00 

什么是做到这一点的好办法,并在我们的XSD使用它?

谢谢, 亚历克斯

+0

为什么?为什么? – 2011-06-06 21:14:15

你可以用前缀负前瞻的正则表达式:

(?!0*(\.00)?) 

给:

^(?!0*(\.00)?$)\d{0,15}(.\d\d)?$ 

注意,这也将拒绝一个空字符串。

+0

太棒了!谢谢。我们有一些非常相似的东西,但是我们的SAXParser不喜欢这个正则表达式。我们需要在解析器上设置一些选项。 – 2011-06-06 20:13:35

+0

XSD正则表达式不支持此语法。 – 2011-06-06 21:13:17

如何

[1-9]\d{0,14}(\.\d{2})? 

我还要第二什么@MRAB暗示。您的正则表达式将与空字符串匹配(零个数字后跟零个“点位数字”)。这一个至少需要1-9个数字存在,并且任何具有多于一个数字的数字都有一个第一个数字在1和9之间。

你对所接受的事情非常精确,而是对你想要拒绝的东西不确切。是否要拒绝任何具有十进制值零的东西,而不管它是如何写入的?在这种情况下,解决方案应该在模式方面有<minExclusive value="0"/>方面。事实上,我不确定使用totalDigits和fractionDigits方面无法做到这一点。