我在我继承的php项目中有这种模式。
^(([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}))$
当用于验证完整的英国邮政编码(例如LE1 1AA)时,其适用于所有实际目的。但是我需要调整它以允许部分邮政编码,如LE1,SN5等,只提供第一段。
有人可以建议如何进行调整吗?
答案 0 :(得分:2)
这应该做的工作
^(([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})?))$
答案 1 :(得分:0)
首先:
英国邮政编码正确的正则表达式(或多或少似乎与您相似,但我没有时间/意愿检查每个可能的情况):
^(([A-Z]\d{2}[A-Z]{2})|([A-Z]\d{3}[A-Z]{2})|([A-Z]{2}\d{2}[A-Z]{2})|([A-Z]{2}\d{3}[A-Z]{2})|([A-Z]\d[A-Z]\d[A-Z]{2})|([A-Z]{2}\d[A-Z]\d[A-Z]{2})|(GIR0AA))$
According to the geonames' data(英国官方iso代码为GB,英国保留,地理编码:2635167)
始终根据此数据格式为:
@# #@@|@## #@@|@@# #@@|@@## #@@|@#@ #@@|@@#@ #@@|GIR0AA
在哪里,IIRC,@
代表字符,#
代表数字。
因此,要仅检索GB邮政编码的第一部分,您的格式将变为:
@#|@##|@@#|@@##|@#@|@@#@|GIR
假设这是你要实现的部分检查,正则表达式将成为:
^(([A-Z]\d)|([A-Z]\d{2})|([A-Z]{2}\d)|([A-Z]{2}\d{2})|([A-Z]\d[A-Z])|([A-Z]{2}\d[A-Z])|(GIR))$
当然,您可能希望同时支持大写和小写字符,如果是这种情况,只需将所有[A-Z]
次出现更改为[A-Za-z]
,将GIR
更改为{{1} }
请记住,如果代码存在,这将仅验证邮政编码的格式,为此您可以从geonames.org下载信息并将其解析到数据库中以供日后检查