Javascript问题:正则表达式问题查找匹配

时间:2013-03-20 18:10:19

标签: javascript regex

我确信这很简单,我只是看不到它。我一直在寻找例子,虽然它们简短而简单,但似乎无法找到我的问题。

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

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代表CAnada。

我的onChange函数从输入调用以下方法(onchange class checkValidPostal(this)):

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它在该页面上效果很好,但出于某种原因,我无法让它在我的网站上工作!

请帮忙。

3 个答案:

答案 0 :(得分:4)

有一个问题:当你使用字符串而不是regex literals时,你缺少一些擒纵机构。

此外,您可能希望使用test而不是匹配。

你可以这样修理:

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;
}

答案 1 :(得分:2)

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

答案 2 :(得分: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)$/
}