我需要一个正则表达式来进行字符串验证。字符串可以是空的,可以有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