2011-03-28 137 views
41

我需要一个正则表达式来验证two or one数字,然后,.和再次two or one数字。正则表达式只有数字和点或逗号

所以,这些都是有效的输入:

11,11 
11.11 
1.1 
1,1 
+6

[当问正则表达式的问题,随时添加标签为特定的编程语言或工具(例如, Perl,Python或Java; vi,emacs或ɢɴᴜgrep;等等)你正在使用。](http://stackoverflow.com/tags/regex/info) – Johnsyweb 2011-03-28 10:12:13

回答

58
\d{1,2}[\,\.]{1}\d{1,2} 

编辑:更新,以满足新的要求(意见);)
编辑:删除unnecesary qtfier按布莱恩

^[0-9]{1,2}([,.][0-9]{1,2})?$ 
+0

对不起,我没有指定,但。并且其后的数字不是必需的.1或11也是有效的。 – user256034 2011-03-28 10:55:53

+5

^[0-9] {1,2}([,。] {1} [0-9] {1,2})?$这将匹配11 11,11 11.11 1.1并且它不匹配11.或11.11.11。并用Perl测试它看起来符合posix,所以它应该与其他正则表达式引擎一起工作 – user237419 2011-03-28 11:01:35

+1

不需要'{1}'。 – 2011-03-28 11:12:25

10
\d{1,2}[,.]\d{1,2} 

\ d表示数字,{1,2}部分表示前一个字符的1或2(\ d在第是大小写),[,。]部分表示逗号或点。

+0

对不起,我没有指定,但是,。并且其后的数字不是必需的.1或11也是有效的。 – user256034 2011-03-28 10:56:44

13

\d表示大多数语言的数字。您还可以在所有语言中使用[0-9]。对于“句号或逗号”使用[\.,]。根据你的语言,你可能需要更多的反斜杠,这取决于你如何引用表达式。最终,正则表达式引擎需要看到一个反斜杠。

*表示“零或多”,因此\d*[0-9]*表示“零个或多个数字”。 ?的意思是“零或一”。这些限定符都不完全意味着一个。大多数语言还允许使用{m,n}表示“在m和n之间”(即:{1,2}表示“在1和2之间”)

由于点或逗号和附加数字是可选的,因此您可以将它们在一个组中,并使用量词来表示该组的“零”。

把所有的一起,你可以使用:

\d{1,2}([\.,][\d{1,2}])? 

含义,一个或两个数字\d{1,2},其次是零或一后跟一位或两位数字组成的圆点或逗号的一组(...)?[\.,]\d{1,2}

9

为了表示在正则表达式的形式的单个位则可以使用:

[0-9]或\ d

为了指定的数量出现了多少次,你会增加

[0-9] *:星意味着有零个或多个数字

[0-9] {2}:{N}表示N个数位

[0-9] {0,2}:{N,M} N个数位或M位

[0-9] {0-9}: {NM} N位至M位。注:M可以留空针对无限表示

可以说,我要代表1至99之间的数字我将它表示为例如:1-

[0-9] { 2}或[0-9] {1,2}或\ d {1-2}或\ d {1,2}

或者让我们说我们正在使用二进制显示,显示字节大小,我们希望我们的数字在0到1之间,字节长度为8,所以我们可以如下表示:

[0-1] {8}的二进制字节

然后,如果要添加一个或一个的表示。您可以使用的符号:

\,或\。也可以使用[。]或[,]

还可以说明的可能值之间的选择这样

[,]意味着要么一个点或逗号符号

而你只需要连接在一起,所以在你想表示一个1或2位数字后跟一个逗号或一个句点,然后是两个数字的情况下,你可以如下表示: >

[0-9] {1,2} [,] \ d {1-2}

另外请注意,内C++字符串的正则表达式的字符串必须是双回削减所以每\成为\\

0

如果你想成为非常宽松,只需要两个最后数字以逗号或点:

^([,.\d]+)([,.]\d{2})$