我确信这很简单,我只是看不到它。我一直在寻找例子,虽然它们简短而简单,但似乎无法找到我的问题。
我希望验证邮政编码字段并使用加拿大邮政编码格式。我找到了一个我想使用的表达式,它看起来如下:
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它在该页面上效果很好,但出于某种原因,我无法让它在我的网站上工作!
请帮忙。
答案 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)$/
}