我需要一个正则表达式来进行字符串验证。字符串可以为空,可以有5位数,也可以有9位数。其他情况无效。我正在使用下一个正则表达式:
/\d{5}|\d{9}/
但它不起作用。
答案 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}|)$/