2011-01-27 77 views
5

我需要一個正則表達式來進行字符串驗證。字符串可以是空的,可以有5位數字,可以有9位數字。其他情況是無效的。我正在使用下一個正則表達式:PHP正則表達式數字長度只有5或9

/\d{5}|\d{9}/ 

但它不起作用。

+2

`/ ^(\ d {5})(\ d {4})?)$ /`?假設這些數字是字符串中唯一的數字,它將匹配5個數字,可選地跟着4個數字。 – 2011-01-27 13:48:01

回答

16

正如Marc B said in the comments,我會用這個正則表達式:

/^(\d{5}(\d{4})?)?$/ 

這或者正是五位數字可能跟其他的四個數字(因此總共九位)或任何字符匹配(注意圍繞數字表達式的?量化器,使得該組可選)。

這種模式與其他提到的模式相反的優點是,如果匹配五位數字失敗,這將不需要回溯。

1

「不起作用」沒有多大幫助。但不是這樣的?

/^(\d{5}|\d{9}|)$/ 

(有些生疏的正則表達式,但我試圖做的是「開始,然後是5位或9位數字或什麼,然後結束)

3
~^(?:\d{5}|\d{9}|)$~ 

你忘了錨^$沒有它們,字符串將與字符串中的任何位置的數字匹配,而不僅僅是在開始或結束時。此外,您沒有覆蓋空字符串的情況。

4

使用錨和「?」以允許空字符串

/^(\d{5}|\d{9})?$/ 
1

答案爲什麼它的工作是Perl風格的正則表達式的變化優先從左到右。

將其更改爲:

/\d{9}|\d{5}/(雖然,這不會告訴你任何東西約6-8和10無窮 除非它與斷言或別的東西固定。)

/^(\d{5}|\d{9}|)$/

相關問題