1

我确定这很简单,我只是看不到它。我一直在寻找示例,尽管它们很简短,但我似乎找不到我的问题。

我希望验证邮政编码字段并使用加拿大邮政编码格式。我找到了一个我希望使用的表达式,它如下所示:

var validZIP={
   "US":"^\d{5}([\-]?\d{4})?$",
   "UK":"^(GIR|[A-Z]\d[A-Z\d]??|[A-Z]{2}\d[A-Z\d]??)[ ]??(\d[A-Z]{2})$",
   "CA":"^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$"
}

请注意CA在这种情况下代表加拿大。

我的onChange函数调用以下方法(checkValidPostal(this)来自输入的 onchange 类):

function checkValidPostal(input)
{
    var re =  new RegExp(validZIP["CA"]);
    var value = input.value.toUpperCase();  
    if (value.match(re))
    {
        input.value = value;
        return true;    
    }
    input.value = "";
    return false;
}

我已经使用以下方法检查了 RegEx 行:

http://www.regular-expressions.info/javascriptexample.html它在该页面上运行良好,但由于某种原因我无法让它在我的上运行!

请帮忙。

4

3 回答 3

4

有一个问题:当您使用字符串而不是正则表达式文字时,您缺少一些擒纵机构。

此外,您可能想使用测试而不是匹配。

你可以这样解决:

var validZIP={
   "US": /^\d{5}([\-]?\d{4})?$/,
   "UK": /^(GIR|[A-Z]\d[A-Z\d]??|[A-Z]{2}\d[A-Z\d]??)[ ]??(\d[A-Z]{2})$/,
   "CA": /^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$/
}

function checkValidPostal(input) {
    var re =  validZIP["CA"];
    var value = input.value.toUpperCase();  
    if (re.test(value)) {
        input.value = value;
        return true;    
    }
    input.value = "";
    return false;
}
于 2013-03-20T18:16:24.617 回答
2

在字符串中,您需要对反斜杠进行双重转义,否则它们已经被字符串转义,并且在 RegEx 构造函数获取字符串时没有剩余的反斜杠。

于 2013-03-20T18:15:41.207 回答
0

尝试在 validZIP 中放置模式而不是字符串:

var validZIP={
   "US":/^\d{5}([\-]?\d{4})?$/,
   "UK":/^(GIR|[A-Z]\d[A-Z\d]??|[A-Z]{2}\d[A-Z\d]??)[ ]??(\d[A-Z]{2})$/,
   "CA":/^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$/
}
于 2013-03-20T18:18:10.963 回答