正则表达式以验证邮政编码和检查无效字符

时间:2013-04-01 16:16:56

标签: javascript regex

我正在尝试验证邮政编码的输入,现在这个邮政编码应该适用于美国,加拿大,英国,所有国家但省略任何特殊字符,所以我试过,如果通过那么我先检查无效字符然后我检查邮政编码是否为美国,或者只是为了确保有效字符不超过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@@");
}

3 个答案:

答案 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 >