多个邮政编码用逗号分隔

Far*_*taw -1 javascript regex

我想过滤输入中的多个邮政编码,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)

Tha*_*you 5

这将检查两个以逗号分隔的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、12345、12345
  • 12345、12345-9999、12345

作为奖励,让我们说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)