使用正则表达式匹配8或9位数

时间:2013-12-20 19:25:31

标签: javascript regex

我认为这是一个简单的正则表达式问题 - 我对正则表达式来说相当新,所以,在这个问题上,我已经将它降低了约90%(我认为!)。

我需要在文本框中匹配两个字符串(所有数字)中的一个。

 1. ####-####
 2. ########

所以,第一个字符串是9个字符,其中' - '在中间。第二个字符串是8位数字,没有' - '在那里。

我得到的是:

/[\d]{4}-??[\d]{4}/

效果非常好,但由于第一个选项我必须允许9个字符,这也验证了#########(9位数),因为前8个匹配表达式。< / p>

所以,我该怎么做?

我想也许包括[^ \ d]?最后会这样做(可选,非数字,这将使第9个数字打破匹配),但是,这没有...

感谢阅读!

2 个答案:

答案 0 :(得分:8)

您需要添加行首和行尾标记,以确保只有此模式匹配。

/^[\d]{4}-?[\d]{4}$/

答案 1 :(得分:6)

使用^$

'00000000'.match(/^\d{4}-?\d{4}$/) // true
'0000-0000'.match(/^\d{4}-?\d{4}$/) // true
'000000000'.match(/^\d{4}-?\d{4}$/) // nil

^匹配字符串的开头; $匹配结尾。没有它们,你匹配任何子串。例如,你的原始正则表达式将匹配一个20位数的字符串。