我认为这是一个简单的正则表达式问题 - 我对正则表达式来说相当新,所以,在这个问题上,我已经将它降低了约90%(我认为!)。
我需要在文本框中匹配两个字符串(所有数字)中的一个。
1. ####-####
2. ########
所以,第一个字符串是9个字符,其中' - '在中间。第二个字符串是8位数字,没有' - '在那里。
我得到的是:
/[\d]{4}-??[\d]{4}/
效果非常好,但由于第一个选项我必须允许9个字符,这也验证了#########(9位数),因为前8个匹配表达式。< / p>
所以,我该怎么做?
我想也许包括[^ \ d]?最后会这样做(可选,非数字,这将使第9个数字打破匹配),但是,这没有...
感谢阅读!
答案 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位数的字符串。