Validieren und analysieren Sie Postleitzahlen im Vereinigten Königreich
Hilfsmethoden für britische Postleitzahlen, einschließlich der Validierung der Form einer Postleitzahl und der Extraktion von Postleitzahlelementen (wie Incodes, Outcodes, Gebiete und mehr).
Getestet anhand von ca. 1,7 Millionen Postleitzahlen auf ONSPD.
npm install postcode
import { isValid } from "postcode" ;
isValid ( "AA1 1AB" ) ; // => true
Übergeben Sie einen String zum parse
. Dadurch wird eine gültige oder ungültige Postleitzahleninstanz zurückgegeben, die leicht destrukturiert werden kann.
ValidPostcode
Typdefinition
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" ) ;
InvalidPostcode
Typdefinition
const {
postcode , // => null
outcode , // => null
incode , // => null
area , // => null
district , // => null
unit , // => null
sector , // => null
subDistrict , // => null
valid , // => false
} = parse ( " Oh no, ): " ) ;
Der TypeScript-Compiler kann aus parse
ableiten, ob Sie über einen gültigen Postleitzahlentyp verfügen, indem er das valid
Attribut überprüft
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 ) ;
}
Postleitzahl | .outcode | .incode | .Bereich | .Bezirk | .subDistrict | .Sektor | .Einheit |
---|---|---|---|---|---|---|---|
AA9A 9AA | AA9A | 9AA | AA | AA9 | AA9A | AA9A 9 | AA |
A9A 9AA | A9A | 9AA | A | A9 | A9A | A9A 9 | AA |
A9 9AA | A9 | 9AA | A | A9 | null | A9 9 | AA |
A99 9AA | A99 | 9AA | A | A99 | null | A99 9 | AA |
AA9 9AA | AA9 | 9AA | AA | AA9 | null | AA9 9 | AA |
AA99 9AA | AA99 | 9AA | AA | AA99 | null | AA99 9 | AA |
Wenn Sie nur einen einzelnen Wert benötigen, können Sie eine einzelne Methode importieren.
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
Versucht, eine Postleitzahl ohne Validierung zu korrigieren und zu bereinigen, indem häufig falsch platzierte Zeichen ersetzt werden (z. B. Verwechslung von 0
und "O"
, 1
und "I"
). Diese Methode schreibt auch Großbuchstaben und korrigiert die Abstände. Die ursprüngliche Eingabe wird zurückgegeben, wenn sie nicht zuverlässig behoben werden kann.
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
Soll in Verbindung mit Parse verwendet werden, um die Eingabe von Postleitzahlen fehlerfreier zu gestalten:
const { inward } = parse ( fix ( "SW1A 2A0" ) ) ; // inward = "2AO"
Wenn die Eingabe nicht korrigierbar ist, wird die ursprüngliche Zeichenfolge zurückgegeben
fix ( "12a" ) = > "12a"
match
. Rufen Sie gültige Postleitzahlen in einem Textkörper ab
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
. Ersetzen Sie Postleitzahlen in einem Textkörper und geben Sie den aktualisierten Korpus und alle passenden Postleitzahlen zurück
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 bringt Änderungen mit sich, die ein besseres Treeshaking und eine bessere Interoperabilität mit ES-Modulen ermöglichen. Außerdem werden veraltete, klassenbasierte APIs zugunsten von Einzweckmethoden abgeschafft.
postcode
exportiert keine Klasse mehr. Die alte new Postcode()
Funktionalität wurde entfernt. An Postcode
angehängte Methoden sind alle als benannte Exporte verfügbar.postcode
verwendet keine Standardexporte mehr. Alle Exporte werden benannt. Z.B // In <= 4.0.0
import Postcode from "postcode" ;
Postcode . parse ( "SW1A 2AA" ) ;
// In >= 5.0.0
import { parse } from "postcode" ;
parse ( "SW1A 2AA" ) ;
In vielen Fällen kann die Migration erreicht werden, indem import Postcode from "postcode"
in import * as Postcode from "postcode"
geändert wird. Dadurch gehen jedoch weitreichende Vorteile verloren.
postcode
exportiert jetzt einen ES-Modul-Buildmatch
akzeptiert eine Zeichenfolge und gibt alle gültigen Postleitzahlen zurückreplace
akzeptiert eine Zeichenfolge und ersetzt gültige Postleitzahlen durch ein optionales zweites Argument. Der Standard-Ersetzungstext ist eine leere Zeichenfolge ""
Ein Glossar der Begriffe der Postleitzahlenkomponenten finden Sie im Leitfaden zum Postleitzahlenformat.
Postleitzahlen können nicht nur mit einem regulären Ausdruck (wie komplex er auch sein mag) validiert werden. Für eine echte Postleitzahlenvalidierung ist eine vollständige Liste der zu prüfenden Postleitzahlen erforderlich. Wenn Sie sich auf einen regulären Ausdruck verlassen, werden falsche Positive/Negative erzeugt.
Einen Überblick über die Ansätze und Kompromisse im Zusammenhang mit der Postleitzahlenvalidierung finden Sie im Leitfaden zur Postleitzahlenvalidierung.
npm test
MIT
Enthält Ordnance Survey-Daten. © Crown Copyright & Database Right