验证和解析英国邮政编码
英国邮政编码的实用方法,包括验证邮政编码的形状、提取邮政编码元素(如输入代码、输出代码、区域等)。
在 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
麻省理工学院
包含军械测量数据 © 皇家版权和数据库权利