2011-12-23 425 views
0

有以下从文本输入年份值验证:的JavaScript:\ d {4}正则表达式允许超过4个位数

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

RegExp等于null如果从0到3 数字数字这是确定的。
在4位数的情况下,它返回值。 没关系。
如果超过4个数字,它会再次返回值,即不正确

文件说{n}声明意味着确切的数字,但工作方式类似:

exact+ 

有了这么丑的验证它工作的罚款:

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

我只想利用RegExp对象。

+2

使用分隔符它必须是匹配表达式的整个字符串,而不仅仅是它的一部分。***^\\ d {4} $ *** – Alfabravo 2011-12-23 09:23:57

+2

使用:''^ \\ d {4} $'' – Yoshi 2011-12-23 09:24:22

回答

4

是的,它会允许超过4位数字,因为它可能是部分匹配,所以使用^$来标记字符串的开始和结束。

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

谢谢,工程确定 – sergionni 2011-12-23 09:27:36

2

它与前四位数字匹配,然后事实上有任何剩余数字它既不在这里也不在那里。您需要所以这四个数字后停止,也就是说,通过使用字符串终止锚改变你的正则表达式:

^\d{4}$ 
+0

这仍然不起作用,因为它没有启动字符串锚'''所以将允许以4位数字结尾的任何内容。例如12345或abc1234 – 2011-12-23 09:26:41

+0

我刚刚意识到我的错误并修复它以查找您的评论!谢谢:) – Xophmeister 2011-12-23 09:27:53

2

尝试,而不是:

'^\\d{4}$' 

你有什么会随时随地配合4位什么如asd1234asd或123456789

+0

谢谢,工作确定 – sergionni 2011-12-23 09:27:30

2

如果您在您的正则表达式^它的字符串开始处匹配,而$结束比赛,所以一切都取决于:

^\d{4}$ 

只会匹配字符串开头加四位数加上字符串结尾。

注意,正则表达式文字语法通常比说new Regex()简单一些:

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

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

另外,如果你只是想检查,如果字符串匹配的模式(是或否)无解压你应该使用真正匹配什么.test()方法如下:所以正则表达式分析器知道

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