英国の郵便番号を検証して解析する
英国郵便番号のユーティリティ メソッド。郵便番号の形状の検証、郵便番号要素 (インコード、アウトコード、エリアなど) の抽出が含まれます。
ONSPD で約 170 万の郵便番号に対してテスト済み。
npm install postcode
import { isValid } from "postcode" ;
isValid ( "AA1 1AB" ) ; // => true
parse
に文字列を渡します。これにより、簡単に構造化できる有効または無効な郵便番号インスタンスが返されます。
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" ) ;
InvalidPostcode
タイプの定義
const {
postcode , // => null
outcode , // => null
incode , // => null
area , // => null
district , // => null
unit , // => null
sector , // => null
subDistrict , // => null
valid , // => false
} = parse ( " Oh no, ): " ) ;
TypeScript コンパイラは、 valid
属性をチェックすることで、 parse
から有効な郵便番号タイプがあるかどうかを推測できます。
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 ) ;
}
郵便番号 | .outcode | .incode | 。エリア | 。地区 | .subDistrict | 。セクタ | 。ユニット |
---|---|---|---|---|---|---|---|
AA9A 9AA | AA9A | 9AA | AA | AA9 | AA9A | AA9A 9 | AA |
A9A 9AA | A9A | 9AA | あ | A9 | A9A | A9A9 | AA |
A9 9AA | A9 | 9AA | あ | A9 | null | A9 9 | AA |
A99 9AA | A99 | 9AA | あ | 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 |
単一の値を取得したい場合は、単一のメソッドをインポートできます。
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
一般的に間違って配置されている文字 (例: 0
と"O"
、 1
と"I"
の混同) を置き換えることにより、検証を行わずに郵便番号を修正してクリーンアップしようとします。このメソッドは、スペースも大文字にして固定します。確実に修正できない場合は、元の入力が返されます。
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
parse と組み合わせて使用して、郵便番号入力をより寛容にすることを目的としています。
const { inward } = parse ( fix ( "SW1A 2A0" ) ) ; // inward = "2AO"
入力が修正可能と判断されない場合は、元の文字列が返されます。
fix ( "12a" ) = > "12a"
match
。テキスト本文内の有効な郵便番号を取得する
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
。テキスト本文内の郵便番号を置換し、更新されたコーパスと一致する郵便番号を返します。
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 では、ツリーシェーキングと ES モジュールとの相互運用性が向上する変更が加えられています。また、従来のクラスベースの API も廃止され、単一目的のメソッドが優先されます。
postcode
クラスをエクスポートしなくなりました。従来のnew Postcode()
機能は削除されました。 Postcode
にアタッチされたメソッドはすべて、名前付きエクスポートとして使用できます。postcode
デフォルトのエクスポートを使用しなくなりました。すべてのエクスポートには名前が付けられます。例えば // In <= 4.0.0
import Postcode from "postcode" ;
Postcode . parse ( "SW1A 2AA" ) ;
// In >= 5.0.0
import { parse } from "postcode" ;
parse ( "SW1A 2AA" ) ;
多くの場合、 import Postcode from "postcode"
をimport * as Postcode from "postcode"
に変更することで移行を実現できますが、これによりツリーシェーキングの利点が失われます。
postcode
ES モジュール ビルドをエクスポートするようになりましたmatch
文字列を受け入れ、すべての有効な郵便番号を返します。replace
文字列を受け入れ、有効な郵便番号をオプションの 2 番目の引数で置き換えます。デフォルトの置換テキストは空の文字列""
です郵便番号コンポーネントの用語集については、郵便番号形式ガイドを参照してください。
郵便番号は、正規表現 (たとえ複雑であっても) だけでは検証できません。真の郵便番号検証には、チェック対象となる郵便番号の完全なリストが必要です。正規表現に依存すると、誤った陽性/陰性が生成されます。
郵便番号検証に関連するアプローチとトレードオフの概要については、郵便番号検証ガイドを参照してください。
npm test
マサチューセッツ工科大学
陸地測量データが含まれています © Crown Copyright & Database Right