我想过滤输入中的多个邮政编码,COMA至少应分隔2个邮政编码,我正在尝试使用以下代码在javascript中对其进行验证,但现在正在过滤,提交时将表单发送至下一页错误,有人可以帮忙吗?
<script>
function validateMULTIZIP() {
if(!/\d{11,}/.test(document.zipad.textfield.value) && document.getElementById('single').checked==false))
{
alert( "There should be a least two Zip codes separated by a coma." );
document.zipad.textfield.focus() ;
return false;
}
return true;
}
</script>
Run Code Online (Sandbox Code Playgroud)
这将检查两个以逗号分隔的5位数字
^\d{5},\d{5}$
Run Code Online (Sandbox Code Playgroud)

但是,您至少说了两个,所以这意味着它需要稍微灵活一些才能容纳更多。如果用户输入,12345,12345,12345它必须是有效的。
^\d{5}(?:,\d{5})+$
Run Code Online (Sandbox Code Playgroud)

如果用户在逗号后添加空格怎么办?如12345, 12345。这是完全有效的,因此,请确保我们的验证器允许。
^\d{5}(?:,\s*\d{5})+$
Run Code Online (Sandbox Code Playgroud)

哦,邮政编码也可以有可选的-1234结尾(称为ZIP + 4。也许您想要这样的东西
^\d{5}(?:-\d{4})?(?:,\s*\d{5}(?:-\d{4})?)+$
Run Code Online (Sandbox Code Playgroud)

现在像这样的字符串将是有效的
作为奖励,让我们说12345, 12345是无效的,因为它具有相同的邮政编码两次。这是我们解决的方法
(?:(\d{5}),?)(?!.*\1)
Run Code Online (Sandbox Code Playgroud)

这是ZIP + 4版本
(?:(\d{5}(?:-\d{4})?),?)(?!.*\1(?!-))
Run Code Online (Sandbox Code Playgroud)

由于(例如)的可能性,这一点增加了一些复杂性12345, 12345-9999。这是有效的,但是由于12345可以出现多次,因此可以确保5位数的邮政编码不会因唯一的9位数的邮政编码而无效。
请注意,这些重复检查的正则表达式不会强制使用至少两个唯一的邮政编码。如果要检查重复项,则需要将两者合并。
var valid5DigitZipCodes = function(str) {
if (! /^\d{5}(?:,\s*\d{5})+$/.test(str)) {
alert("You need at least 2 zip codes");
return false;
}
else if (! /(?:(\d{5}),?)(?!.*\1)/.test(str)) {
alert("You entered a duplicate zip code");
return false;
}
return true;
};
Run Code Online (Sandbox Code Playgroud)
如果您想支持的话,这里是ZIP + 4变体
var valid9DigitZipCodes = function(str) {
if (! /^\d{5}(?:-\d{4})?(?:,\s*\d{5}(?:-\d{4})?)+$/.test(str)) {
alert("You need at least 2 zip codes");
return false;
}
else if (! /(?:(\d{5}(?:-\d{4})?),?)(?!.*\1(?!-)).test(str) {
alert("You entered a duplicate zip code");
return false;
}
return true;
};
Run Code Online (Sandbox Code Playgroud)