2011-10-10 83 views
0

我正在修改正则表达式验证控件。 此刻正则表达式如下:Modyfying正则表达式来限制数字范围

(\d*\,?\d{2}?){1}$ 

至于我能理解它允许与2位小数的数字。

我需要修改它:

  • 数必须介于0 - 1.000.000。 (从零到一百万)。
  • 该数字可能有或没有2位小数。
  • 该值不能为负值。
  • 逗号(,)是小数点分隔符。
  • 不应该允许任何千分隔符。
+2

这是不是一个很好的(甚至是正确的)正则表达式。我宁愿重写它,也不愿修改它。您确定要使用逗号作为小数点分隔符吗?你想允许(或甚至要求)点数千分隔符? –

+0

数字“可以”有或必须有2位小数? –

+0

哪一点证明有问题?你看过任何“相关”的帖子吗?这不是StackOverflow的新问题! – Johnsyweb

回答

0

这个怎么样

^(?:\d{1,6}(?:\,\d{2})?|1000000)$ 

查看它here on Regexr

它接受1个6位,并用2位OR “1000000” 的可选部分之间。

它允许数字从零开始! (001将被接受)

^锚正则表达式到字符串的开始

$锚正则表达式到字符串

(?:)的端部是一个非捕获组

0
^(([0-9]|([1-9][0-9]{1,5}))(\.[0-9]{1,2})?)|1000000$ 
2

试试这个正则表达式:

^(((0|[1-9]\d{0,5})(\,\d{2})?)|(1000000(\,00)?))$ 

它接受如下数字:"4", "4,23", "123456", "1000000", "1000000,00", 但不接受:",23", "4,7", "1000001", "4,234", "1000000,55"

如果你想正是两位小数只接受号码,使用这个表达式:

+0

@Tim,是的,我注意到你后面的这5秒:)更正了 –

+0

现在是可选的。但老wersion也工作(它使用替代'|'没有任何'?') –

+0

哦,我明白了。我忽略了管道角色。但现在好多了。最后一个问题:这个正则表达式允许'1000000.99',这可能是或不是所希望的。可能不是,但仍然是+1。 –