驗證和解析英國郵遞區號
英國郵遞區號的實用方法,包括驗證郵遞區號的形狀、提取郵遞區號元素(如輸入代碼、輸出代碼、區域等)。
在 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 編譯器可以透過parse
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 ) ;
}
郵遞區號 | .outcode | .incode | 。 | 。 | .分區 | .扇區 | 。 |
---|---|---|---|---|---|---|---|
AA9A 9AA | AA9A | 9AA | AA | AA9 | AA9A | AA9A 9 | AA |
A9A 9AA | A9A | 9AA | 一個 | A9 | A9A | A9A 9 | 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"
來實現遷移,但這會放棄 treeshaking 的優勢。
postcode
現在導出 ES 模組構建match
接受一個字串並傳回所有有效的郵遞區號replace
接受一個字串並用可選的第二個參數替換有效的郵遞區號。預設替換文字為空字串""
有關郵遞區號組成術語的術語表,請參閱郵遞區號格式指南。
僅使用正規表示式(無論多麼複雜)無法驗證郵遞區號。真正的郵遞區號驗證需要有完整的郵遞區號清單來檢查。依賴正規表示式會產生錯誤的肯定/否定。
請參閱郵遞區號驗證指南,以了解與郵遞區號驗證相關的方法和權衡的概述。
npm test
麻省理工學院
包含軍械測量數據 © 皇家版權和資料庫權利