【问题标题】:Javascript UK Postcode Validation [duplicate]Javascript英国邮政编码验证[重复]
【发布时间】:2012-12-07 19:30:59
【问题描述】:

可能重复:
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

我已经进行了大量研究,但似乎无法为这个常见的验证要求找到最终的正则表达式。有人能指出我正确的方向吗?

【问题讨论】:

  • 我已经使用了这个测试器:regular-expressions.info/javascriptexample.html 并且您提供的示例按预期工作。第一个通过,第二个没有。
  • @willemD'haeseleer 我已经驳回了那个脚本,因为在我看来,它太大了。
  • @jnovacho 对于 Safari 6 中的两个示例,我都得到“不匹配”。

标签: javascript regex validation postal-code


【解决方案1】:

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

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

【讨论】:

  • 这不允许许多伦敦邮政编码,例如唐宁街是 SW1A 2AA,白金汉宫是 SW1A 1AA。试试:const regex = /^[A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1} ?[0-9][A-Z]{2}$/i;
【解决方案2】:

您需要一个“明确的正则表达式”——考虑到英国邮政编码的所有排列,因此它需要“不必要地大”。这是我过去用过的一个

"(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,因为在每个部分中总会排除某些字母。

【讨论】:

  • 这是正确的,但也有点重复。这已经在以下问题stackoverflow.com/questions/164979/…中得到了回答
  • 确实,在阅读您链接到的问题之前,我已经发布了我的答案。因此,建议问题是重复的
【解决方案3】:

问题出在函数的第一行。通过修剪目标字符串中的空格,可以允许误报。

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多