正则表达式没有返回true但它应该(独立测试)

时间:2016-08-16 17:08:55

标签: javascript regex

我有一个功能:

function isZipCodeValid (zipcode) {
   var pattern = /^\d{5}(?:[-]\d{4}){0,1}$/;
   console.log(pattern.test(zipcode));
   return pattern.test(zipcode);
}

我也尝试过这样:

function isZipCodeValid (zipcode) {
   var pattern = /^\d{5}(?:[-]\d{4})?$/;
   console.log(pattern.test(zipcode));
   return pattern.test(zipcode);
}

似乎没有什么区别。

当我传入邮政编码12345时,它返回true。当我传入12345-6789时,它会返回false,但https://regex101.com/处的独立验证表明我的正则表达式应与模式匹配。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

这是因为JS正在5556上运行测试。这是12345减6789.基本上它运行数学运算,得到一个4位数,并测试它(显然会返回错误)。修复它的一种方法是将邮政编码包装在引号中。

var pattern = /^\d{5}(?:[-]\d{4}){0,1}$/;
var zipcode = '12345-7865';
console.log(pattern.test(zipcode));

查看工作here