regex 爱尔兰Eircode验证

gab6jxml  于 2023-08-08  发布在  其他
关注(0)|答案(4)|浏览(81)

我想知道是否有爱尔兰Eircode格式验证的最佳实践。到目前为止,我最好的尝试是在JavaScript中使用REGEX,下面是基于第11页上的官方规范**here**。

  • (第11页,基于文档中的页码,或第12页,如果包括封面)*
/^[A,C,D,E,F,H,K,N,P,R,T,V,W,X,Y]{1}[0-9]{1}[0-9,W]{1}[\ \-]?[0-9,A,C,D,E,F,H,K,N,P,R,T,V,W,X,Y]{4}$/

字符串
我在这里没有找到任何与Eircode相关的问题,所以我想我应该打开这个问题,看看其他人的想法,看看有什么更好/更短/更有效的模式可以提出来。
编辑:根据@Asunez回答删除逗号。

/^[ACDEFHKNPRTVWXY]{1}[0-9]{1}[0-9W]{1}[\ \-]?[0-9ACDEFHKNPRTVWXY]{4}$/

oyt4ldly

oyt4ldly1#

由于@Manwal的答案并没有完全做到它应该做的事情,下面是我尝试缩短OP的正则表达式:
第一个月
更新版本支持A65 B2CD邮政编码-(?:^[AC-FHKNPRTV-Y][0-9]{2}|D6W)[ -]?[0-9AC-FHKNPRTV-Y]{4}$
这基本上就是你的Regex,有一些变化:

  • 删除逗号。不需要逗号来列出[]方括号内的项。
  • 在可能的情况下添加了范围,并且可以保存一些空间(C-FV-Y)。在其他地方,添加范围没有好处,因为它不会使regex更短。
  • 你不需要逃离空间。regex中的““是文字。
  • 如果破折号是字符类中的最后一个字符(方括号),也不需要转义破折号
  • 正则表达式的第一部分现在在一个非捕获组中,允许用第三个位置唯一可能的字母“D 6 W”进行 OR 运算。

也可以用lookbehind专门处理D6W,但这比正则表达式更有艺术性。
请参见Regex Demo:here
你也可以反转字符类来包含给定的字符,虽然它不会使正则表达式更短,但也值得注意。但是,您需要确保其他字符(如点,逗号)也不包括在内。我通过添加\W令牌来实现。
你可以试试here

oymdgrw7

oymdgrw72#

根据产品指南第1.5.4章,允许的标志为:
| 岗位|允许的字符| Allowed characters |
| ------------|--| ------------ |
| 一个|A、C、D、E、F、H、K、N、P、R、T、V、W、X、Y、字母顺序为| A,C,D,E,F,H,K,N,P,R,T,V,W,X,Y |
| 二个|0-9岁| 0-9 |
| 三个|0-9,但对于D 6 W,W除外| 0-9 with the exception of W for D6W |
| 四个|0-9,字母A、C、D、E、F、H、K、N、P、R、T、V、W、X、Y、字母A、C、D、E、F、H、K、N、P、R、T、V、W、X、Y| 0-9, A,C,D,E,F,H,K,N,P,R,T,V,W,X,Y |
| 五个|0-9,字母A、C、D、E、F、H、K、N、P、R、T、V、W、X、Y、字母A、C、D、E、F、H、K、N、P、R、T、V、W、X、Y| 0-9, A,C,D,E,F,H,K,N,P,R,T,V,W,X,Y |
| 六个|0-9,字母A、C、D、E、F、H、K、N、P、R、T、V、W、X、Y、字母A、C、D、E、F、H、K、N、P、R、T、V、W、X、Y| 0-9, A,C,D,E,F,H,K,N,P,R,T,V,W,X,Y |
| 七个|0-9,字母A、C、D、E、F、H、K、N、P、R、T、V、W、X、Y、字母A、C、D、E、F、H、K、N、P、R、T、V、W、X、Y| 0-9, A,C,D,E,F,H,K,N,P,R,T,V,W,X,Y |
每个路由关键字必须包含字母和两位数字,除了一个特定情况,即D6W代码。
因此,以A5WC6WV0W开头的代码是无效的。
根据第1.5.1章“储存和展示建议”,

  • 在IT系统中,Eircode应始终存储为七个大写字符的单个字符串,即A65 F4 E2的数据。
  • 在文具、邮件、计算机表单等上,Eircode应始终以大写字母表示,由空格分隔为两个部分。即A65 F4 E2,而从不使用A65 F4 E2。

存储在数据库中的代码不应用空格或破折号分隔;仅应使用空格来分隔用于显示的代码。
假设上面的情况,正确的正则表达式应该如下所示:
/([AC-FHKNPRTV-Y]\d{2}|D6W)[0-9AC-FHKNPRTV-Y]{4}/
Regex online tester
Ericode guide

wbgh16ku

wbgh16ku3#

更新了这个答案,避免了char B。你可以试试这个:

/^[AC-Y]{1}[0-9]{1}[0-9W]{1}[ \-]?[0-9AC-Y]{4}$/

字符串
产品描述:

^ assert position at start of the string
[AC-Y]{1} match a single character present in the list below
Quantifier: {1} Exactly 1 time (meaningless quantifier)
A the literal character A (case sensitive)
C-Y a single character in the range between C and Y (case sensitive)
[0-9]{1} match a single character present in the list below
Quantifier: {1} Exactly 1 time (meaningless quantifier)
0-9 a single character in the range between 0 and 9
[0-9W]{1} match a single character present in the list below
Quantifier: {1} Exactly 1 time (meaningless quantifier)
0-9 a single character in the range between 0 and 9
W the literal character W (case sensitive)
[ \-]? match a single character present in the list below
Quantifier: ? Between zero and one time, as many times as possible, giving back as needed [greedy]
  the literal character  
\- matches the character - literally
[0-9AC-Y]{4} match a single character present in the list below
Quantifier: {4} Exactly 4 times
0-9 a single character in the range between 0 and 9
A the literal character A (case sensitive)
C-Y a single character in the range between C and Y (case sensitive)
$ assert position at end of the string

zbsbpyhn

zbsbpyhn4#

从hywak answer开始,并遵循其他评论建议,这是我的php正则表达式:

/^([AC-FHKNPRTV-Y]\d{2}|D6W)\s[0-9AC-FHKNPRTV-Y]{4}$/

字符串
我添加了^和$来定义字符串的开始和结束。添加了\s以考虑空间并接受XXX XXXX格式。
关于字母/数字和字母格式的参考,以避免:https://en.wikipedia.org/wiki/List_of_postal_codes
Regex tester
下面是通过测试的最后代码的解释:

  • D14 N2 Fz->最后一个字母小写
  • a65 f4 e2->所有字符都小写
  • D 6 W FNTO ->不允许使用字母O

相关问题