12

正規表現を使用してカナダの郵便番号を検証する JavaScript を作成しました。

ただし、機能していないようです。

JavaScript

If ステートメント:

if (myform.zip.value == "" || myform.zip.value == null || myform.zip.value == "Postal Code" || myform.zip.value.length < 12 ) {
    alert("Please fill in field Postal Code. You should only enter 7 characters");
    myform.zip.focus();
    return false;
}

関数:

function okNumber(myform) {
  var regex = /^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$/;
  if (regex.test(myform.zip.value) == false) {
    alert("Input Valid Postal Code");
    myform.zip.focus();
    return false;
  }

  return true;
}

問題

コードは実行されていますが、まったく機能しません。実行すると、次のようになります。

郵便番号欄に入力してください。入力できるのは 7 文字のみです

有効な郵便番号の例はT2X 1V4.

4

8 に答える 8

7

これは、すべてのカナダの郵便番号で機能します..

^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$
于 2013-01-10T13:56:47.370 に答える
4

正規表現のアプローチでカナダの郵便番号の形式を検証できますが、郵便番号が実際に存在することを保証するには不十分です。

例:有効なカナダの郵便番号のようにA9A 0A0 見えますが、順方向の仕分けエリアA9A は実際には存在しません

郵便番号の公式リストに対してある種のルックアップを行いたくないですか?

于 2012-06-22T03:17:25.863 に答える
1

最初のエラーは、最初の if ステートメントの最後の条件です。 myform.zip.value.length < 12常に true にする必要があるため、コードのこの部分は常にメッセージ"Please fill in field Postal Code. You should only enter 7 characters"を警告し、フィールドにフォーカスを戻しzipます。有効な郵便番号は最大 7 文字であるため、これを に変更する必要がありますmyform.zip.value.length > 7

T2X 1V4その修正を行った後、コメントで提供した郵便番号が検証されます。ただし、使用した正規表現は簡略化できます (コメントにも記載されています)。のすべてのインスタンス{1}は冗長であるため、削除できます。?おそらく、スペースの後に aではなくa を付けるつもりだったのでしょう*。A?は前の文字または式が 0 回または 1 回出現する*可能性があることを意味し、a はそれが 0回以上出現する可能性があることを意味します。郵便番号には最大で 1 つのスペースが必要だと思います。

これをテストした完全な作業コードは次のとおりです。

<!doctype html>
<html>
<head>
    <title>JavaScript Regex Tester</title>
    <meta charset="utf-8">
    <script>
        function validate(myform) {
            if (myform.zip.value == "" || myform.zip.value == null || myform.zip.value == "Postal Code" || myform.zip.value.length > 7 ) {
                alert("Please fill in field Postal Code. You should only enter 7 characters");
                myform.zip.focus();
                return false;
            }

            return okNumber(myform);
        }

        function okNumber(myform) {
            var regex = /^[ABCEGHJKLMNPRSTVXY]\d[A-Z] *\d[A-Z]\d$/;
            if (regex.test(myform.zip.value) == false) {
                alert("Input Valid Postal Code");
                myform.zip.focus();
                return false;
            }

            return true;
        }
    </script>
</head>
<body>
    <form action="#" name="myform" method="post">
        <input type="text" name="zip" value="Postal Code" />
        <input type="button" value="Submit" onclick="validate(document.myform);"/>
    </form>
</body>
</html>

最後に、通常[A-Z]、正規表現を使用する場合、少なくとも[A-Za-z]大文字と小文字のどちらを受け入れるかを検討する価値があります。これがカナダの郵便番号に当てはまるかどうかはわかりませんが、通常、ほとんどのフォームはどちらの入力も受け入れ、必要に応じて大文字と小文字を修正する必要があります。

于 2012-07-03T02:23:54.900 に答える
1

これは、私が使用するカナダの郵便番号の有効な表現です。A0A 0A0 として厳密にフォーマットされます。

/^[A-Za-z]\d[A-Za-z][ -]?\d[A-Za-z]\d$/
于 2016-07-05T20:30:57.680 に答える