我有一个函数:
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));