我有一个功能:
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/处的独立验证表明我的正则表达式应与模式匹配。
我做错了什么?
答案 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