JavaScript:\\ d {4} RegExp允许超过4位数

时间:2011-12-23 09:22:05

标签: javascript regex numbers

对文本输入中的年份值进行以下验证:

if (!year.match(new RegExp('\\d{4}'))){
    ...
}
如果0到3之间的数字数字,则

RegExp等于null没关系。
如果是4位数,则返回值。没关系。
如果超过4位数,它会再次返回值,即不正常

文档说{n}声明意味着确切的数字,但其作用类似于:

exact+

如此丑陋的验证,它的工作正常:

if (!year.match(new RegExp('\\d{4}')) || year.length>4){
...
}

我希望仅使用RegExp对象。

4 个答案:

答案 0 :(得分:5)

是的,它允许超过4位数,因为它是部分匹配使用^$来标记字符串的开头和结尾。

if (!year.match(new RegExp('^\\d{4}$'))){
    ...
}

答案 1 :(得分:2)

它匹配前四位数,然后是这里或那里没有任何剩余数字的事实。您需要更改正则表达式,以便在这四个数字后停止,例如,使用字符串终止锚点:

^\d{4}$

答案 2 :(得分:2)

尝试改为:

'^\\d{4}$'

您拥有的内容将匹配4位数字的任何内容,例如asd1234asd或123456789

答案 3 :(得分:2)

如果您在正则表达式中包含^,则它与字符串的开头匹配,而$与结尾匹配,所以全部:

^\d{4}$

仅匹配字符串开头加上四位加上字符串结尾。

请注意,正则表达式文字语法通常比说new Regex()

简单一些
/^\d{4}$/
// is the equivalent of
new RegExp('^\\d{4}$')

请注意,在文字语法中,您不必像传递给new RegExp()的字符串那样转义反斜杠。正斜杠不是表达式本身的一部分,您可以将它们视为正则表达式的引号。

此外,如果您只想检查字符串是否与模式匹配(是或否)而不提取实际匹配的内容,则应使用.test()方法,如下所示:

if (!/^\d{4}$/.test(year)) {
   ...
}