2009-08-31 278 views
5

我想验证用户输入,它只是用逗号分隔的数字。我想用RegEx做到这一点,但不能提出正确的表达方式。正则表达式逗号分隔号

应该验证以下字符串(较大):

1 
12 
123 
1,234 
12,345 
123,456 

和无效以下字符串(和疯狂):

1,1 
1,12 
12,1 
12,12 
123,1 
123,1 

任何帮助将不胜感激。

这里是我试过至今(编辑:不工作),有几个变种沿 - >

^(((\d{1,3},)*\d{3})|(\d{1,3}))$ 
^(\d{1,3}[,])*\d{3}|\d{1,3}$ 

回答

14

如何:

^\d{1,3}([,]\d{3})*$ 

基本上你可以有1-3位数字免费。之后,你需要一个逗号。如果您有逗号,则必须在之后再加3位数字。该逗号为3位的序列可以出现任意次数。

编辑:安德鲁野兔观察,你不关心什么被发现超出了事实,它匹配的,这样你就可以代替左括号后放置?:使用非捕获组括号内:

^\d{1,3}(?:[,]\d{3})*$ 
+3

+1很好。我唯一的批评:因为这个正则表达式仅用于验证,所以您应该将该捕获组更改为非捕获组。 – 2009-08-31 20:05:58

+2

好点,但它一直困扰着我,使一个非捕获组使得正则表达式变得更加难看。 – 2009-08-31 20:12:41

+0

看着原来的正则表达式,它看起来像12,1,123这样的字符串是合法的((\ d {1,3},)* \ d {3}),上面不满足 – 2009-08-31 20:20:50

相关问题