伦敦邮政编码正则表达式验证

时间:2016-01-22 22:30:56

标签: regex validation

我使用以下Regex语法验证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}))$

验证工作正常,但我只需要在伦敦境内只允许使用Postcodes。

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

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

1 个答案:

答案 0 :(得分:0)

这应该只匹配您的匹配代码,假设它们是一个独立的字符串 - 否则您可能希望使用单词边界\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