我正在尝试验证邮政编码的输入,现在这个邮政编码应该适用于美国,加拿大,英国,所有国家但省略任何特殊字符,所以我试过,如果通过那么我先检查无效字符然后我检查邮政编码是否为美国,或者只是为了确保有效字符不超过8(两者之间的空间可以,只要它现在是美国(包括 - 用于5 + 4)
我遇到的问题是11215例如对于有效字符验证返回false,而11215 @@也返回false。
以下是我的正则表达式:
var reg1 = /^[\^$%@!#&\*:<>\?\/\\~\{\}\(\)\+|]+$/;
var reg2 = /(^\d{5}$)|(^\d{5}-\d{4}$)|(([a-z0-9]{8})*$)/
var isOk = reg1.test("11215"); // returns false!
if(isOk)
{
isOk = isOk && reg2.test("11215");
}
var isOk2 = reg1.test("11215@@"); // returns false also!
if(isOk2)
{
isOk2 = isOk2 && reg2.test("11215@@");
}
答案 0 :(得分:2)
“坏字符”的测试reg1
将始终为false
,除非您的字符串完全由“坏字符”构成。我不认为这是你想要的行为。
var matchBad = /[^\s\da-z\-]/i;
// Match all non-whitespace, non-digit, non-alpabet, non-hyphen
if (false === matchBad.test("11215")) { // no bad chars detected
console.log('pass!');
// continue checking validity..
} else { // bad chars detected
console.log('fail!);
}
答案 1 :(得分:1)
您的第一个正则表达式是测试整个字符串是否包含这些字符。如果您想要收容,请移除表示正则表达式开头和结尾的^
和$
:
var reg1 = /[\^$%@!#&\*:<>\?\/\\~\{\}\(\)\+|]/;
这可能只是问题的一部分,但它应该让你到处找。注意我也删除了+因为它实际上只需要匹配一个字符来检测坏字符。
另外还有设计注意事项。与模式完全匹配的正则表达式应该足以测试它。我对第三种类型的zip不太熟悉,但你可能想让它捕获整个字符串(^
和$
)
答案 2 :(得分:0)
Javascript应该如下所示
<script type="text/javascript">
function IsValidZipCode(zipcode) {
var isValid = /^[0-9]{5}(?:-[0-9]{4})?$/.test(zipcode);
if (!isValid){
alert('Invalid ZipCode');
document.getElementById("zipcode").value = "";
}
}
</script>
Zipcode文字应为
<input id="zipcode" class="zipcode" type="text" placeholder="Your Zipcode?" name="zipcode" onchange="IsValidZipCode(this.form.zipcode.value)" required >