2

我正在尝试验证邮政编码的输入,现在这个邮政编码应该适用于美国、加拿大、英国、所有国家,但忽略任何特殊字符,所以我尝试了,如果通过了,首先检查无效字符然后我检查邮政编码要么是美国,要么不仅仅是为了确保有有效字符并且不超过 8 个(只要现在是美国,它们之间的空格就可以了(其中包括 - 用于 5 + 4)

我遇到的问题是,例如 11215 对于有效字符验证返回为假,而 11215@@ 也返回假。

这是我的正则表达式:

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@@");
}
4

3 回答 3

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!);
}
于 2013-04-01T16:23:09.070 回答
1

您的第一个正则表达式正在测试整个字符串是否包含这些字符。如果你想要包含,删除^$表示你的正则表达式的开始和结束:

var reg1 = /[\^$%@!#&\*:<>\?\/\\~\{\}\(\)\+|]/;

这可能只是问题的一部分,但它应该能让你到达某个地方。注意我还删除了 + 因为它真的只需要匹配一个字符来检测坏字符。

还有另一个设计说明。与模式完全匹配的正则表达式应该足以测试这一点。尽管我对第三种类型的 zip 不太熟悉,但您可能想让它捕获整个字符串(使用^and $

于 2013-04-01T16:22:57.767 回答
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>

邮政编码文本应该是

<input id="zipcode" class="zipcode" type="text" placeholder="Your Zipcode?" name="zipcode" onchange="IsValidZipCode(this.form.zipcode.value)" required >
于 2013-08-27T15:46:20.770 回答