最初のエラーは、最初の 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]
大文字と小文字のどちらを受け入れるかを検討する価値があります。これがカナダの郵便番号に当てはまるかどうかはわかりませんが、通常、ほとんどのフォームはどちらの入力も受け入れ、必要に応じて大文字と小文字を修正する必要があります。