我需要一個正則表達式來進行字符串驗證。字符串可以是空的,可以有5位數字,可以有9位數字。其他情況是無效的。我正在使用下一個正則表達式:PHP正則表達式數字長度只有5或9
/\d{5}|\d{9}/
但它不起作用。
我需要一個正則表達式來進行字符串驗證。字符串可以是空的,可以有5位數字,可以有9位數字。其他情況是無效的。我正在使用下一個正則表達式:PHP正則表達式數字長度只有5或9
/\d{5}|\d{9}/
但它不起作用。
正如Marc B said in the comments,我會用這個正則表達式:
/^(\d{5}(\d{4})?)?$/
這或者正是五位數字可能跟其他的四個數字(因此總共九位)或任何字符匹配(注意圍繞數字表達式的?
量化器,使得該組可選)。
這種模式與其他提到的模式相反的優點是,如果匹配五位數字失敗,這將不需要回溯。
「不起作用」沒有多大幫助。但不是這樣的?
/^(\d{5}|\d{9}|)$/
(有些生疏的正則表達式,但我試圖做的是「開始,然後是5位或9位數字或什麼,然後結束)
~^(?:\d{5}|\d{9}|)$~
你忘了錨^
和$
沒有它們,字符串將與字符串中的任何位置的數字匹配,而不僅僅是在開始或結束時。此外,您沒有覆蓋空字符串的情況。
使用錨和「?」以允許空字符串
/^(\d{5}|\d{9})?$/
答案爲什麼它的工作是Perl風格的正則表達式的變化優先從左到右。
將其更改爲:
/\d{9}|\d{5}/
(雖然,這不會告訴你任何東西約6-8和10無窮 除非它與斷言或別的東西固定。)
/^(\d{5}|\d{9}|)$/
`/ ^(\ d {5})(\ d {4})?)$ /`?假設這些數字是字符串中唯一的數字,它將匹配5個數字,可選地跟着4個數字。 – 2011-01-27 13:48:01