我想知道是否有针对爱尔兰Eircode格式进行验证的最佳实践。到目前为止,根据在第11页上找到的官方规格,我在REGEX中使用JavaScript的最佳尝试是 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}$/

最佳答案

由于@Manwal的答案并未完全应做,因此我尝试缩短OP的正则表达式:
(?:^[AC-FHKNPRTV-Y][0-9]{2}|D6W)[ -]?[0-9AC-FHKNPRTV-Y]{4}$
这基本上就是您的Regex,只是做了一些更改:

  • 删除逗号。您不需要逗号来列出[]括号内的项目。
  • 在可能的地方以及节省空间的地方添加了范围(C-FV-Y)。在其他地方添加范围没有好处,因为它不会使正则表达式更短。
  • 您不需要转义空格。正则表达式中的“”是文字。
  • 如果它是字符类中的最后一个字符(方括号),则也不需要转义破折号
  • 现在,正则表达式的第一部分位于一个非捕获组中,以使其与第三位置的唯一可能字母“D6W”大小写进行或运算。

  • 也可以仅使用lookbehind处理D6W,但这比正则表达式更是一门艺术。

    参见正则表达式演示:here

    您还可以将字符类反转为而不是包括给定字符,并且尽管它不会使正则表达式更短,但也值得注意。但是,您需要确保也不包括其他字符(例如点,逗号)。我通过添加\W token 来实现。

    您可以尝试here

    07-28 12:07