对文本输入中的年份值进行以下验证:
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对象。
答案 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)) {
...
}