英国邮政编码正则表达式验证
Posted
技术标签:
【中文标题】英国邮政编码正则表达式验证【英文标题】:UK postcode regex validation 【发布时间】:2015-08-07 10:30:48 【问题描述】:我正在寻找一个有效的英国邮政编码正则表达式模式,但似乎它们中的任何一个都可以作为传统或正常的正则表达式。
我使用此工具测试所有模式:https://regex101.com/
我在本文档中找到的正则表达式 https://www.gov.uk/government/uploads/system/uploads/attachment_data/file/413338/Bulk_Data_Transfer_-_additional_validation_valid_from_March_2015.pdf 不起作用。
我在这个 wiki 页面https://en.wikipedia.org/wiki/Talk:Postcodes_in_the_United_Kingdom 中尝试了所有正则表达式,但没有。
我做错了吗?
我正在编写一个 Angular 指令。
var regex = ????;
// add a parser that will process each time the value is
// parsed into the model when the user updates it.
ngModel.$parsers.unshift(function(value)
// test and set the validity after update.
var valid = regex.test(value);
console.log(valid);
ngModel.$setValidity('ukPostcode', valid);
// if it's valid, return the value to the model,
// otherwise return undefined.
return valid ? value : undefined;
);
谢谢。
【问题讨论】:
它们在哪些方面不起作用?不匹配有效的邮政编码?让无效的通过?两个都?还有什么? 以下邮政编码的验证失败:rg224ph、rg141de。我住在那里,所以它们是 100% 有效的邮政编码。 尽管您声明:“我使用此工具测试所有模式:regex101.com”[A-PR-UWYZa-pr-uwyz0-9][A-HK-Ya-hk-y0-9][AEHMNPRTVXYaehmnprtvxy0-9]?[ABEHMNPRVWXYabehmnprvwxy0-9]?1,2[0-9][ABD-HJLN-UW-Zabd-hjln-uw-z]2|(GIRgir)3 0(Aa)2)$
无法在那里编译:regex101.com/r/dM9eC1/1
试试^(?:[A-PR-UWYZa-pr-uwyz0-9][A-HK-Ya-hk-y0-9][AEHMNPRTVXYaehmnprtvxy0-9]?[ABEHMNPRVWXYabehmnprvwxy0-9]1,2[0-9][ABD-HJLN-UW-Zabd-hjln-uw-z]2|(GIRgir)3 0(Aa)2)$
。确实,您的正则表达式中有 2 个问题:组设置不正确,因为前导 (
不存在,1,2
限制量词设置在 ?
之后,这是不允许的。其实我不明白你想用(GIRgir)3 0(Aa)2
匹配什么:它匹配GIRgirGIRgirGIRgir 0AaAa
。
任何这个正则表达式都是我写的,这就是为什么我说明了我从哪里得到它们的 URL。所以官方的正则表达式是错误的!!!
【参考方案1】:
当您的正则表达式被更正时,它匹配两者:
rg224ph rg141de
你的正则表达式当前有two errors:
[A-PR-UWYZa-pr-uwyz0-9][A-HK-Ya-hk-y0-9][AEHMNPRTVXYaehmnprtvxy0-9]?[ABEHMNPRVWXYabehmnprvwxy0-9]?1,2[0-9][ABD-HJLN-UW-Zabd-hjln-uw-z]2|(GIRgir)3 0(Aa)2)
^ 1,2 Preceding token is not quantifiable
和
[A-PR-UWYZa-pr-uwyz0-9][A-HK-Ya-hk-y0-9][AEHMNPRTVXYaehmnprtvxy0-9]?[ABEHMNPRVWXYabehmnprvwxy0-9]?1,2[0-9][ABD-HJLN-UW-Zabd-hjln-uw-z]2|(GIRgir)3 0(Aa)2)
^ ) Unbalanced parenthesis
我想你想要的正则表达式是:
([A-PR-UWYZa-pr-uwyz0-9][A-HK-Ya-hk-y0-9][AEHMNPRTVXYaehmnprtvxy0-9]?[ABEHMNPRVWXYabehmnprvwxy0-9]1,2[0-9][ABD-HJLN-UW-Zabd-hjln-uw-z]2|(GIRgir)3 0(Aa)2)
哪个matches both inputs。
【讨论】:
是的,我也猜到了,但没有任何反馈。你确定GIRgirGIRgirGIRgir 0AaAa
是OP需要匹配的吗?
@stribizhev 我同意这很奇怪。我怀疑预期的选项是:[GIRgir]3 0[Aa]2
以上是关于英国邮政编码正则表达式验证的主要内容,如果未能解决你的问题,请参考以下文章