2012-12-11 55 views
-1

这个正则表达式是否有效,以防我想只包含数字31?关于数字的正则表达式

'[^ 0-9> 31] +或者它也会返回字母字符,我必须以某种方式排除它们呢?

+2

为什么使用正则表达式?这不是正确的工具。 – phant0m

+1

使用正确的工具进行正确的工作。 – 2012-12-11 22:54:49

+0

公平地说,如果正则表达式的工作方式是作者所希望的,那么它们将是正确的工具... –

回答

3

你的正则表达式接受一个或多个字符,每个字符的是不是以下

0 1 2 3 4 5 6 7 8 9 > 

的一个你想要的是:

/^(?:[0-9]|[12][0-9]|3[01])$/ 
+1

你可以将这个'[0-9] | [12] [0-9]'结合到这个:'[12]?[0-9]'。 – phant0m

+0

非常好。它不会回溯。 +1 –

+0

是什么意思?以及为什么[01]在方括号内? – user1714768

1

正则表达式是不是文本的声波螺丝刀,能够神奇地做你可能想要的一切。正则表达式中没有任何内容会检查数字的值。

你需要做的是两个步骤,用Perl编写。

$ok = ($s =~ /^\d{1,2}$/) && ($s < 31); 

即检查的$s的字符串(^)的开始时的值,一个或两个数字(\d{1,2}),然后将字符串($)的端部。如果这是真的,那么它还会检查看到的$s数值小于31

是的,你可以使用这样一个复杂的正则表达式从雷特里的回答是:

/^(?:[0-9]|[12][0-9]|3[01])$/ 

但可读性差得多。

+0

“但这可读性差得多”......真的吗? –