Javascript英国邮政编码验证

时间:2012-12-20 09:56:40

标签: javascript regex validation postal-code

  

可能重复:
  UK Postcode Regex (Comprehensive)

我有以下代码用于验证javascript中的邮政编码:

function valid_postcode(postcode) {
    postcode = postcode.replace(/\s/g, "");
    var regex = /[A-Z]{1,2}[0-9]{1,2} ?[0-9][A-Z]{2}/i;
    return regex.test(postcode);
}

试验:

CF47 0HW - Passes - Correct
CF47 OHW - Passes - Incorrect

我做了大量的研究,但似乎无法找到这个常见验证要求的权威正则表达式。有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:6)

通过添加^和$使你的正则表达式更严格。这应该有效:

function valid_postcode(postcode) {
    postcode = postcode.replace(/\s/g, "");
    var regex = /^[A-Z]{1,2}[0-9]{1,2} ?[0-9][A-Z]{2}$/i;
    return regex.test(postcode);
}

答案 1 :(得分:6)

你想要一个'权威的正则表达式' - 考虑到英国邮政编码的所有排列,它需要因此“不必要地大”。这是我过去使用的那个

"(GIR 0AA)|((([ABCDEFGHIJKLMNOPRSTUWYZ][0-9][0-9]?)|(([ABCDEFGHIJKLMNOPRSTUWYZ][ABCDEFGHKLMNOPQRSTUVWXY][0-9][0-9]?)|(([ABCDEFGHIJKLMNOPRSTUWYZ][0-9][ABCDEFGHJKSTUW])|([ABCDEFGHIJKLMNOPRSTUWYZ][ABCDEFGHKLMNOPQRSTUVWXY][0-9][ABEHMNPRVWXY])))) [0-9][ABDEFGHJLNPQRSTUWXYZ]{2})"

请注意,例如,我从不使用A-Z,因为在每个部分中总会排除某些字母。

答案 2 :(得分:1)

问题是你的功能的第一行。通过修剪目标字符串中的空格,可以允许误报。

CF47OHW将匹配[A-Z] {1,2} [0-9] {1,2}?[0-9] [A-Z] {2}

CF matches [A-Z]
4 matches [0-9]{1,2}
(blank) matches \s?
7 matches [0-9]
OH matches [A-Z]{2}
W gets discarded

所以,正如Paulgrav所说,添加开始和结束字符(^和$)将解决它。

此时,您还可以删除\ s?从你的正则表达式的中间位。

然而!尽管修复了错误,但你的正则表达式仍然无法按照你喜欢的方式工作。您应该在此网站UK Postcode Regex (Comprehensive)

上查看以下相当不错的答案