PHP正则表达式的数字长度只有5或9

时间:2011-01-27 13:45:43

标签: php regex

我需要一个正则表达式来进行字符串验证。字符串可以为空,可以有5位数,也可以有9位数。其他情况无效。我正在使用下一个正则表达式:

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

但它不起作用。

5 个答案:

答案 0 :(得分:17)

就像Marc B said in the comments一样,我会使用这个正则表达式:

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

这恰好匹配五个数字,可能后跟另外四个数字(因此总共九个数字)或根本没有字符(请注意数字表达式周围的?量词,使该组可选)。< / p>

这种模式与其他提到的交替模式相反的优点是,如果匹配的五位数失败,则不需要回溯。

答案 1 :(得分:4)

使用锚点和“?”允许空字符串

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

答案 2 :(得分:3)

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

您忘记了锚点^$。如果没有它们,字符串将匹配字符串中任何位置的数字,而不仅仅是在开头或结尾。此外,你没有覆盖空的字符串案例。

答案 3 :(得分:1)

“不起作用”没有多大帮助。但这不是这样的吗?

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

(在正则表达式上有点生锈,但我想做的是“开始,然后是5位或9位数或者没有,然后结束)

答案 4 :(得分:1)

关于它为什么会有效的答案是Perl风格的正则表达式的替换是从左到右的优先顺序。

将其更改为:

/\d{9}|\d{5}/(虽然,这不会告诉你关于6-8和10无穷大的其他信息 除非它以断言或其他东西为基础。)

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