-1

入力で複数の郵便番号をフィルタリングしたい。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>
4

4 に答える 4

6

これは、コンマで区切られた 2 つの 5 桁の数字をチェックします。

^\d{5},\d{5}$

正規表現の視覚化

しかし、あなたは少なくとも2 つとおっしゃいました。それは、より多くに対応できるようにもう少し柔軟にする必要があることを意味します。ユーザーが入力12345,12345,12345する場合、有効である必要があります。

^\d{5}(?:,\d{5})+$

正規表現の視覚化

ユーザーがコンマの後にスペースを追加するとどうなりますか? など12345, 12345。これは完全に有効なので、バリデーターがそれを許可していることを確認しましょう。

^\d{5}(?:,\s*\d{5})+$

正規表現の視覚化

ああ、郵便番号にもオプションの-1234末尾を付けることができます ( ZIP+4として知られています。このようなものが必要になる場合があります)

^\d{5}(?:-\d{4})?(?:,\s*\d{5}(?:-\d{4})?)+$

正規表現の視覚化

これで、このような文字列が有効になります

  • 12345
  • 12345、12345、12345
  • 12345、12345-9999、12345

おまけとして12345, 12345、同じ郵便番号が 2 回あるため、 は無効であるとしましょう。これを修正する方法は次のとおりです

(?:(\d{5}),?)(?!.*\1)

正規表現の視覚化

そしてこちらがZIP+4版

(?:(\d{5}(?:-\d{4})?),?)(?!.*\1(?!-))

正規表現の視覚化

これは、 (eg,) の可能性があるため、少し複雑になり12345, 12345-9999ます。これは有効ですが、12345複数回表示される可能性があるため、一意の 9 桁の郵便番号によって 5 桁の郵便番号が無効にされないようにします。

これらの重複チェック正規表現は、最小 2 つの一意の郵便番号を強制しないことに注意してください。重複をチェックしたい場合は、2 つを組み合わせる必要があります。

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;
};

そして、これをサポートしたい場合は、これが 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;
};
于 2013-08-26T16:51:43.030 に答える
2

(コードから) 郵便番号に 5 桁の数字が含まれ、他の文字が含まれていないと仮定すると、次のように使用できます。

/\d{5},\d{5}/.test(document.zipad.textfield.value)

You regex:\d{11,}は「任意の数字、11 回以上」を意味するため、壊れています。

于 2013-08-26T16:52:09.203 に答える
0

2 つ以上ではなく 1 つ以上の zip に一致するバリアントに興味がある人向け。式の末尾にある * の + 量指定子を変更するだけです。

から:

^\d{5}(?:-\d{4})?(?:,\s*\d{5}(?:-\d{4})?)+$

に:

^\d{5}(?:-\d{4})?(?:,\s*\d{5}(?:-\d{4})?)*$

例えば:

<input type="text" inputmode="numeric" pattern="^\d{5}(?:-\d{4})?(?:,\s*\d{5}(?:-\d{4})?)*$">

于 2019-09-27T12:46:39.347 に答える