Validar y analizar códigos postales del Reino Unido
Métodos de utilidad para códigos postales del Reino Unido, incluida la validación de la forma de un código postal y la extracción de elementos de código postal (como códigos de entrada, códigos de salida, áreas y más).
Probado con ~1,7 millones de códigos postales en ONSPD.
npm install postcode
import { isValid } from "postcode" ;
isValid ( "AA1 1AB" ) ; // => true
Pase una cadena para parse
. Esto devolverá una instancia de código postal válida o no válida que puede desestructurarse fácilmente.
Definición del tipo de 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" ) ;
Definición de tipo de InvalidPostcode
const {
postcode , // => null
outcode , // => null
incode , // => null
area , // => null
district , // => null
unit , // => null
sector , // => null
subDistrict , // => null
valid , // => false
} = parse ( " Oh no, ): " ) ;
El compilador de TypeScript puede inferir si tiene un tipo de código postal válido a partir parse
verificando el 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 | .código de salida | .incode | .área | .distrito | .subdistrito | .sector | .unidad |
---|---|---|---|---|---|---|---|
AA9A 9AA | AA9A | 9AA | Automóvil club británico | AA9 | AA9A | AA9A 9 | Automóvil club británico |
A9A 9AA | A9A | 9AA | A | A9 | A9A | A9A 9 | Automóvil club británico |
A9 9AA | A9 | 9AA | A | A9 | null | A9 9 | Automóvil club británico |
A99 9AA | A99 | 9AA | A | A99 | null | A99 9 | Automóvil club británico |
AA9 9AA | AA9 | 9AA | Automóvil club británico | AA9 | null | AA9 9 | Automóvil club británico |
AA99 9AA | AA99 | 9AA | Automóvil club británico | AA99 | null | AA99 9 | Automóvil club británico |
Si solo busca un valor único, puede importar un método único.
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
Intenta corregir y limpiar un código postal sin validarlo reemplazando caracteres comúnmente mal colocados (por ejemplo, mezclando 0
y "O"
, 1
y "I"
). Este método también pondrá mayúsculas y arreglará el espaciado. La entrada original se devuelve si no se puede reparar de manera confiable.
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
Su objetivo es usarse junto con el análisis para hacer que la entrada de códigos postales sea más tolerante:
const { inward } = parse ( fix ( "SW1A 2A0" ) ) ; // inward = "2AO"
Si la entrada no se considera reparable, se devolverá la cadena original
fix ( "12a" ) = > "12a"
match
. Recuperar códigos postales válidos en un cuerpo 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
. Reemplazar códigos postales en un cuerpo de texto, devolviendo el corpus actualizado y cualquier código postal coincidente
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 trae cambios que permiten una mejor interoperabilidad y agitación de árboles con los módulos ES. También desaprueba las API basadas en clases heredadas en favor de métodos de propósito único.
postcode
ya no exporta una clase. Se ha eliminado new Postcode()
. Todos los métodos adjuntos al Postcode
están disponibles como exportaciones con nombre.postcode
ya no utiliza exportaciones predeterminadas. Todas las exportaciones tienen nombre. P.ej // In <= 4.0.0
import Postcode from "postcode" ;
Postcode . parse ( "SW1A 2AA" ) ;
// In >= 5.0.0
import { parse } from "postcode" ;
parse ( "SW1A 2AA" ) ;
En muchos casos, la migración se puede lograr cambiando import Postcode from "postcode"
a import * as Postcode from "postcode"
; sin embargo, esto elimina las ventajas de la agitación de árboles.
postcode
ahora exporta una compilación del módulo ES.match
acepta una cadena y devuelve todos los códigos postales válidosreplace
acepta una cadena y reemplaza los códigos postales válidos con un segundo argumento opcional. El texto de reemplazo predeterminado es una cadena vacía ""
Consulte la guía de formato de código postal para obtener un glosario de términos de componentes de códigos postales.
Los códigos postales no se pueden validar simplemente con una expresión regular (por compleja que sea). La verdadera validación de códigos postales requiere tener una lista completa de códigos postales para comparar. Depender de una expresión regular producirá falsos positivos/negativos.
Consulte la guía de validación de códigos postales para obtener una descripción general de los enfoques y las compensaciones asociadas con la validación de códigos postales.
npm test
MIT
Contiene datos de estudios de artillería © Crown Copyright & Database Right