【问题标题】:Regex pattern for London postcodes not matching伦敦邮政编码的正则表达式模式不匹配
【发布时间】:2020-07-09 08:38:31
【问题描述】:

我正在尝试为 Javascript 创建一个正则表达式模式,以测试提供的邮政编码值,以确定它是否与伦敦邮政编码匹配。 London postcodes 以任一开头:

  • EC、WC、NW、SE 或 SW
  • E#、N#、W#(其中 # 是 1 到 9,个位数)

我的正则表达式模式是:^[nN|eE|wW][1-9]{1}|[ecEC|wcWC|nw|NW|seSE|swSW]{2},出于某种原因,它似乎认为以 CE 开头的值匹配?当我没有指定这个时......

我哪里错了?

【问题讨论】:

  • 使用(?:...) 而不是[...]
  • [ecEC] 表示所有这 4 个字符以任意顺序被接受。所以即使是 CE 也会匹配。正如上面评论中所建议的,改变你的括号。
  • 把你的模式放到一些在线的正则表达式调试器上试试看是什么意思。
  • @Thefourthbird ^(?:nN|eE|wW)[1-9]{1}|(?:ecEC|wcWC|nw|NW|seSE|swSW){2} 更改后似乎无效,不匹配任何内容

标签: javascript html regex


【解决方案1】:

尝试以下方法:

pattern = new RegExp('^(?:(?:n|e|w)[1-9]|(?:ec|wc|[ns]w|se))','gi')

在线查看demo


在您发表评论后,我认为您可能希望根据您在 OP 中的链接完全匹配所有伦敦邮区。

pattern = new RegExp('^(?:e(?:[1-9]|1[0-8]|20)|n(?:[1-9]|1\d|2[012])|w(?:[1-9]|1[0-4])|ec[1-4]|wc[12]|nw(?:[1-9]|1[01])|se(?:[1-9]|1\d|2[0-8])|sw(?:[1-9]|1\d|20)) [a-z]+(?: [a-z']+)*$','gi')

在线查看demo

您可能需要将反斜杠加倍。

【讨论】:

  • 这很好,似乎匹配,但邮政编码超过 2 个字符,并且正则表达式在 2 个字符后失败,需要在整个过程中保持正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多