第一个错误是初始 if 语句中的最后一个条件。 myform.zip.value.length < 12应该始终为真,因此您的这部分代码将始终提醒消息"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 次或多次。我认为您的邮政编码最多需要一个空格。
这是我测试过的完整工作代码:
<!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]接受大写或小写字母。我不知道加拿大邮政编码是否属于这种情况,但通常情况下,大多数表格应该接受任一输入并根据需要更正大小写。