我试图在javascript中使用Regex.test验证年份,但无法弄清楚为什么返回false。
var regEx = new RegExp("^(19|20)[\d]{2,2}$");
输入值1981,2007 regEx.test(inputValue)
返回false
由于
答案 0 :(得分:23)
当您使用字符串表达式创建RegExp
对象时,需要将反斜杠加倍,以便它们正确转义。同样[\d]{2,2}
可以简化为\d\d
:
var regEx = new RegExp("^(19|20)\\d\\d$");
或者更好的是使用正则表达式文字来避免加倍反斜杠:
var regEx = /^(19|20)\d\d$/;
答案 1 :(得分:6)
找到 REAL 问题:
更改声明以删除引号:
var regEx = new RegExp(/^(19|20)[\d]{2,2}$/);
答案 2 :(得分:3)
你的意思是
var inputValue = "1981, 2007";
如果是这样,这将失败,因为由于起始字符串(^)和结束字符串($)字符,模式不匹配。
如果要捕获这两年,请从模式中删除这些字符并进行全局匹配(使用/ g)
var regEx = new RegExp(/(?:19|20)\d{2}/g);
var inputValue = "1981, 2007";
var matches = inputValue.match(regEx);
匹配将是一个包含所有匹配项的数组。
答案 3 :(得分:1)
我注意到,由于我无法解释的原因,有时你必须在d前面有两个\。
所以试试[\\ d],看看是否有帮助。