Как отфильтровать почтовые индексы Великобритании - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь сопоставить первую часть британского почтового индекса с теми, которые я держал в файле JSON. Я делаю это в Vue.

На данный момент мне удалось сопоставить почтовый индекс, если в нем есть две совпадающие буквы, но некоторые британские почтовые индексы не начинаются с 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
);

Может ли кто-нибудь помочь мне найти (например) «B», если я наберу B94 5RD, и «BA», если я наберу BA33HT?

1 Ответ

0 голосов
/ 21 мая 2019

Вы можете использовать регулярное выражение, соответствующее буквам алфавита в начале строки.

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]; в своей строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...