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/上的独立验证表明我的regex应该匹配模式。

我做错了什么?

这是因为JS正在5556上运行测试。也就是12345 - 6789。本质上,它运行一个数学运算,获取一个4位数,然后测试它(显然会返回false)。解决这个问题的一种方法是把邮政编码用引号括起来。

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

最新更新