【问题标题】:London postcode Regex Validation伦敦邮政编码正则表达式验证
【发布时间】:2016-01-22 22:30:56
【问题描述】:

我正在使用以下正则表达式语法在 RSForm!Pro 中验证英国邮政编码:

^(([gG][iI][rR] {0,}0[aA]{2})|((([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK -Y]?[0-9][0-9]?)|(([a-pr-uwyzA-PR-UWYZ][0-9][a-hjkstuwA-HJKSTUW])|([a-pr- uwyzA-PR-UWYZ][a-hk-yA-HK-Y][0-9][abehmnprv-yABEHMNPRV-Y]))) {0,}[0-9][abd-hjlnp-uw-zABD- HJLNP-UW-Z]{2}))$

验证工作正常,但我需要只允许伦敦境内的邮政编码。

以下是允许的邮政编码: WC、EC、E1-E20、N1-N22、NW1-NW11、SE1-SE28、SW1-SW20、W1-14、HA0-9、EN1-8

是否有任何正则表达式仅验证伦敦邮政编码,如果没有,我如何在此之后运行单独的验证并检查邮政编码是否为上述之一。

【问题讨论】:

    标签: regex validation


    【解决方案1】:

    这应该只匹配你的匹配码,假设它们是一个独立的字符串 - 否则你可能想要使用单词边界 \b 而不是锚点 ^$。我认为没有太多优化可能,只是非常直接地匹配所有可能的代码:

    ^(?:[WE]C|(?:E|SW)(?:[1-9]|1[0-9]|[12]0)|N(?:[1-9]|1[0-9]|2[0-2])|NW(?:[1-9]|1[01])|SE(?:[1-9]|1[0-9]|2[0-8])|W(?:[1-9]|1[0-4])|HA[0-9]|EN[1-8])$
    

    这是一个带有正面匹配和一些负面示例的演示:

    https://regex101.com/r/cT6fQ5/2

    但是 - 在对该主题进行了更多阅读之后,这可能比您最初的帖子提供的要深得多。我找到了这个带有伦敦邮政编码http://www.doogal.co.uk/london_postcodes.php 的网站,并制定了一个解决方案,该解决方案限制特定于伦敦的前 3 或 4 位数字,然后使用您最初的邮政编码正则表达式的最后一部分:

    (?i)^((?:EC(?:[1234][AMNPRV]|[124]Y)|WC(?:[12][ABEHNR]|1[VX])|(?:E|SW)(?:[0-9]|1[0-9]|[12]0)|N(?:[1-9]|1[0-9]|2[0-2])|NW(?:[1-9]|1[01])|SE(?:[1-9]|1[0-9]|2[0-8])|W(?:[1-9]|1[0-4])|HA[0-9]|EN[1-8]|E1W) {0,}[0-9][ABD-HJLNP-UW-Z]{2})$
    

    还有一个演示: https://regex101.com/r/eD1gW3/3

    【讨论】:

    • 无法匹配这些情况:E1-E20, N1-N22, NW1-NW11, SE1-SE28, SW1-SW20, W1-14, HA0-9, EN1-8
    • @noob Imho E1-E20 表示 E1, E2, E3 ... E20 等等,你可以在这里看到:doogal.co.uk/london_postcodes.php
    • 哦!我不知道。我只是遵守 OP 的规范。谢谢你告诉我。
    • 我已经尝试了第二个正则表达式,它似乎进行了验证,但是它不允许输入小写的邮政编码。例如它接受 E1 2YQ 但不接受 e1 2yq。理想的情况是验证以大写和小写形式输入的两个邮政编码以及是否有空格。它也不适用于 E1W 2YQ。
    • @Sami 如果小写邮政编码实际上被认为是有效的(您的问题和我发现的任何进一步信息都不清楚),您可以使用不区分大小写的修饰符 (i) 运行您的正则表达式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2015-07-06
    • 2012-06-24
    相关资源
    最近更新 更多