2012-12-11 54 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

「但這可讀性差得多」......真的嗎? –