如何过滤英国邮政编码
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/…以上是关于如何过滤英国邮政编码的主要内容,如果未能解决你的问题,请参考以下文章