Validar e analisar códigos postais do Reino Unido
Métodos utilitários para códigos postais do Reino Unido, incluindo validação da forma de um código postal, extração de elementos de código postal (como códigos de entrada, códigos de saída, áreas e muito mais).
Testado em cerca de 1,7 milhão de códigos postais no ONSPD.
npm install postcode
import { isValid } from "postcode" ;
isValid ( "AA1 1AB" ) ; // => true
Passe uma string para parse
. Isso retornará uma instância de código postal válida ou inválida que pode ser facilmente desestruturada.
Definição do tipo ValidPostcode
import { parse } from "postcode" ;
const {
postcode , // => "SW1A 2AA"
outcode , // => "SW1A"
incode , // => "2AA"
area , // => "SW"
district , // => "SW1"
unit , // => "AA"
sector , // => "SW1A 2"
subDistrict , // => "SW1A"
valid , // => true
} = parse ( "Sw1A 2aa" ) ;
Definição de tipo InvalidPostcode
const {
postcode , // => null
outcode , // => null
incode , // => null
area , // => null
district , // => null
unit , // => null
sector , // => null
subDistrict , // => null
valid , // => false
} = parse ( " Oh no, ): " ) ;
O compilador TypeScript pode inferir se você tem um tipo de código postal válido da parse
, verificando o atributo valid
import { parse } from "postcode" ;
const postcode = parse ( "SW1A 2AA" ) ;
if ( postcode . valid ) {
// `postcode` adheres to the `ValidPostcode` interface
processString ( postcode . outcode . toLowerCase ( ) ) ; // TypeScript compiler knows `outcode` to be a string
processString ( postcode . subDistrict . toLowerCase ( ) ) ; // And it will throw errors on common gotchas (e.g. subdistrict can be `null` on a valid postcode)
} else {
// `postcode` adheres to the `InvalidPostcode` interface
processInvalidPostcode ( postcode ) ;
}
Código postal | .outcode | .incode | .área | .distrito | .subDistrict | .setor | .unidade |
---|---|---|---|---|---|---|---|
AA9A 9AA | AA9A | 9AA | AA | AA9 | AA9A | AA9A 9 | AA |
A9A 9AA | A9A | 9AA | UM | A9 | A9A | A9A 9 | AA |
A9 9AA | A9 | 9AA | UM | A9 | null | A9 9 | AA |
A99 9AA | A99 | 9AA | UM | A99 | null | A99 9 | AA |
AA9 9AA | AA9 | 9AA | AA | AA9 | null | AA9 9 | AA |
AA99 9AA | AA99 | 9AA | AA | AA99 | null | AA9999 | AA |
Se você deseja apenas um único valor, poderá importar um único método.
isValid ( "Sw1A 2aa" ) ; // => true
import {
toNormalised ,
toOutcode ,
toIncode ,
toArea ,
toDistrict ,
toSubDistrict ,
toSector ,
toUnit ,
} from "postcode" ;
toNormalised ( "Sw1A 2aa" ) ; // => "SW1A 2AA"
toOutcode ( "Sw1A 2aa" ) ; // => "SW1A"
toIncode ( "Sw1A 2aa" ) ; // => "2AA"
toArea ( "Sw1A 2aa" ) ; // => "SW"
toDistrict ( "Sw1A 2aa" ) ; // => "SW1"
toSubDistrict ( "Sw1A 2aa" ) ; // => "SW1A"
toSector ( "Sw1A 2aa" ) ; // => "SW1A 2"
toUnit ( "Sw1A 2aa" ) ; // => "AA"
fix
Tentativas de corrigir e limpar um código postal sem validar, substituindo caracteres comumente mal colocados (por exemplo, misturando 0
e "O"
, 1
e "I"
). Este método também colocará letras maiúsculas e corrigirá o espaçamento. A entrada original é retornada se não puder ser corrigida de forma confiável.
fix ( "SWIA 2AA" ) = > "SW1A 2AA" // Corrects I to 1
fix ( "SW1A 21A" ) = > "SW1A 2IA" // Corrects 1 to I
fix ( "SW1A OAA" ) = > "SW1A 0AA" // Corrects O to 0
fix ( "SW1A 20A" ) = > "SW1A 2OA" // Corrects 0 to O
// Other effects
fix ( " SW1A 2AO" ) = > "SW1A 2AO" // Properly spaces
fix ( "sw1a 2aa" ) = > "SW1A 2AA" // Uppercase
Pretende ser usado em conjunto com parse para tornar a entrada do código postal mais tolerante:
const { inward } = parse ( fix ( "SW1A 2A0" ) ) ; // inward = "2AO"
Se a entrada não for considerada corrigível, a string original será retornada
fix ( "12a" ) = > "12a"
match
. Recuperar códigos postais válidos em um corpo de texto
const matches = match ( "The PM and her no.2 live at SW1A2aa and SW1A 2AB" ) ; // => ["SW1A2aa", "SW1A 2AB"]
// Perform transformations like normalisation using `.map` and `toNormalised`
matches . map ( toNormalised ) ; // => ["SW1A 2AA", "SW1A 2AB"]
matches . map ( toOutcode ) ; // => ["SW1A", "SW1A"]
// No matches yields empty array
match ( "Some London outward codes are SW1A, NW1 and E1" ) ; // => []
replace
. Substitua os códigos postais em um corpo de texto, retornando o corpus atualizado e quaisquer códigos postais correspondentes
const { match , result } = replace ( "The PM and her no.2 live at SW1A2AA and SW1A 2AB" ) ;
// => match: ["SW1A2AA", "SW1A 2AB"]
// => result: "The PM and her no.2 live at and "
// Add custom replacement
replace ( "The PM lives at SW1A 2AA" , "Downing Street" ) ;
// => { match: ["SW1A 2AA"], result: "The PM lives at Downing Street" };
// No match
replace ( "Some London outward codes are SW1A, NW1 and E1" ) ;
// => { match: [], result: "Some London outward codes are SW1A, NW1 and E1" }
5.0.0 traz mudanças que permitem melhor treeshaking e interoperabilidade com Módulos ES. Ele também descontinua APIs baseadas em classes legadas em favor de métodos de propósito único.
postcode
não exporta mais uma classe. new Postcode()
foi removida. Os métodos anexados ao Postcode
estão todos disponíveis como exportações nomeadas.postcode
não usa mais exportações padrão. Todas as exportações são nomeadas. Por exemplo // In <= 4.0.0
import Postcode from "postcode" ;
Postcode . parse ( "SW1A 2AA" ) ;
// In >= 5.0.0
import { parse } from "postcode" ;
parse ( "SW1A 2AA" ) ;
Em muitos casos, a migração pode ser alcançada alterando import Postcode from "postcode"
para import * as Postcode from "postcode"
, no entanto, isso abre mão das vantagens do treeshaking.
postcode
agora exporta uma compilação do Módulo ESmatch
aceita uma string e retorna todos os códigos postais válidosreplace
aceita uma string e substitui códigos postais válidos por um segundo argumento opcional. O texto de substituição padrão é uma string vazia ""
Consulte o guia de formato de código postal para obter um glossário de termos de componentes de código postal.
Os códigos postais não podem ser validados apenas com uma expressão regular (por mais complexa que seja). A verdadeira validação de código postal requer uma lista completa de códigos postais para verificação. Depender de uma regex produzirá falsos positivos/negativos.
Consulte o guia de validação de código postal para obter uma visão geral das abordagens e compensações associadas à validação de código postal.
npm test
MIT
Contém dados de pesquisa de artilharia © Crown Copyright & Database Right