2011-01-27 407 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}|)$/