如何过滤英国邮政编码

Posted

技术标签:

【中文标题】如何过滤英国邮政编码【英文标题】:How to filter UK postcodes 【发布时间】:2019-05-20 15:51:41 【问题描述】:

我正在尝试将英国邮政编码的第一部分与我保存在 JSON 文件中的部分进行匹配。我在 Vue 中这样做。

目前我已经设法匹配邮政编码,如果它有 2 个匹配的字母,但是一些英国邮政编码不以 2 个字母开头,有些只有一个,这就是失败的地方。

查看完整代码 https://codesandbox.io/s/48ywww0zk4

JSON 示例


  "id": 1,
  "postcode": "AL",
  "name": "St. Albans",
  "zone": 3
,

  "id": 2,
  "postcode": "B",
  "name": "Birmingham",
  "zone": 2
,

  "id": 3,
  "postcode": "BA",
  "name": "Bath",
  "zone": 5

let postcodeZones = this.postcodeDetails.filter(
  pc => pc.postcode
          .toLowerCase()
          .slice(0, 2)
          .indexOf(this.selectPostcode.toLowerCase().slice(0, 2)) > -1
);

如果我输入 B94 5RD 和 'BA' 如果我输入 BA33HT,谁能帮我找到(例如)'B'?

【问题讨论】:

你能得到邮政编码值的长度,然后按每个长度切片吗? 你不能只使用像 var result = 'BA3'.replace(/[^A-Z]/gi, ''); 这样的正则表达式,它保留所有大写字母字符并丢弃其余字符 @LenJoseph 我不确定你的意思? @Flame 抱歉,我应该(并将更新问题)完整的英国邮政编码看起来像这样的“BA33HT”或“B94 5RD”,这可能会导致问题,对吗? 【参考方案1】:

您可以使用与字符串开头的字母匹配的正则表达式。

function getLettersBeforeNumbers( postcode ) 
  return postcode.match( /^[a-zA-Z]*/ )[0];


let a = getLettersBeforeNumbers( 'B94 5RD' );
let b = getLettersBeforeNumbers( 'bA33HT' );
let c = getLettersBeforeNumbers( '33bA33HT' );

console.log( a, b, c );

/** EXPLANATION OF THE REGEXP

  / ^[a-zA-Z]* /
  
  ^ = anchor that signifies the start of the string
  [  ... ] = select characters that are equal to ...
  a-z = all characters in the alphabet
  A-Z = all capatilised characters in the alphabet
  * = zero or more occurances
**/

PS:你可以在你的字符串上使用.match( /^[a-zA-Z]*/ )[0];

【讨论】:

嗨,我一定很愚蠢,因为我不知道如何实现这个?你能帮我吗? :// 我怀疑您可能想使用string.startsWith 而不是string.indexOf + > -1-check。 (前提是您不必支持旧浏览器。)。文档:developer.mozilla.org/en-US/docs/Web/javascript/Reference/…

以上是关于如何过滤英国邮政编码的主要内容,如果未能解决你的问题,请参考以下文章

格式化英国邮政编码以进行存储

英国邮政编码验证器

英国邮政编码查找流程的好例子[关闭]

通过匹配邮政编码字符串查找最接近其他英国邮政编码的英国邮政编码

英国邮政编码列表 - 最近的五个邮政编码列表

从英国邮政编码地理编码经度和纬度? [复制]