PHP正则表达式数字长度仅为5或9
我需要一个用于字符串验证的正则表达式。字符串可以为空,可以有5位数字,也可以有9位数字。其他情况无效。我正在使用下一个正则表达式:PHP正则表达式数字长度仅为5或9,php,regex,Php,Regex,我需要一个用于字符串验证的正则表达式。字符串可以为空,可以有5位数字,也可以有9位数字。其他情况无效。我正在使用下一个正则表达式: /\d{5}|\d{9}/ 但是它不起作用。“不起作用”没有多大帮助。但不是这样吗 /^(\d{5}|\d{9}|)$/ (在regexp上有点生疏,但我尝试做的是“开始,然后是5位数或9位数,或者什么都没有,然后是结束”) 您忘记了锚点^和$。没有锚点,字符串将与字符串中的任何位置匹配,而不仅仅是在开头或结尾。此外,您没有涵盖空字符串的大小写。使用锚点和“?”
/\d{5}|\d{9}/
但是它不起作用。“不起作用”没有多大帮助。但不是这样吗
/^(\d{5}|\d{9}|)$/
(在regexp上有点生疏,但我尝试做的是“开始,然后是5位数或9位数,或者什么都没有,然后是结束”)
您忘记了锚点^
和$
。没有锚点,字符串将与字符串中的任何位置匹配,而不仅仅是在开头或结尾。此外,您没有涵盖空字符串的大小写。使用锚点和“?”来允许空字符串
/^(\d{5}|\d{9})?$/
正如,我将使用以下正则表达式:
/^(\d{5}(\d{4})?)?$/
这正好匹配五个数字,后面可能跟另外四个数字(总共九个数字),或者根本没有字符(请注意,数字表达式周围的?
量词使组成为可选的)
与其他提到的具有交替的模式相反,这种模式的优点是,如果匹配五位数字失败,则不需要回溯。关于它为什么不起作用的答案是,Perl风格的正则表达式的交替从左到右排列优先级 将其更改为:
/\d{9}\d{5}/
(不过,这不会告诉您关于6-8和10无穷大的任何其他信息
除非它被断言或其他东西锚定。)
/^(\d{5}| \d{9}|)$/
/^(\d{5})(\d{4})$/
?假设数字是字符串中唯一的内容,这将匹配5个数字,可选地后跟4个以上。@MarcB:这甚至在语法上都无效。cuirous,空字符串会告诉你什么?更好的方法来进行邮政编码验证…可能的重复
/^(\d{5}(\d{4})?)?$/