Проверка и анализ почтовых индексов Великобритании
Служебные методы для почтовых индексов Великобритании, включая проверку формы почтового индекса, извлечение элементов почтового индекса (таких как входные и выходные коды, области и т. д.).
Протестировано на ~1,7 миллионах почтовых индексов на ONSPD.
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 | .область | .округ | .подрайон | .сектор | .единица |
---|---|---|---|---|---|---|---|
АА9А 9АА | АА9А | 9АА | АА | АА9 | АА9А | АА9А 9 | АА |
А9А 9АА | А9А | 9АА | А | А9 | А9А | А9А 9 | АА |
А9 9АА | А9 | 9АА | А | А9 | null | А9 9 | АА |
А99 9АА | А99 | 9АА | А | А99 | null | А99 9 | АА |
АА9 9АА | АА9 | 9АА | АА | АА9 | null | АА9 9 | АА |
АА99 9АА | АА99 | 9АА | АА | АА99 | null | АА99 9 | АА |
Если вам нужно только одно значение, вы можете импортировать один метод.
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
Предназначен для использования в сочетании с синтаксическим анализом, чтобы сделать ввод почтового индекса более простым:
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
принимает строку и заменяет действительные почтовые индексы необязательным вторым аргументом. Текст замены по умолчанию — пустая строка ""
Глоссарий терминов компонентов почтового индекса см. в руководстве по формату почтового индекса.
Почтовые индексы невозможно проверить только с помощью регулярного выражения (каким бы сложным оно ни было). Настоящая проверка почтового индекса требует наличия полного списка почтовых индексов для проверки. Использование регулярного выражения приведет к ложным положительным/отрицательным результатам.
См. руководство по проверке почтового индекса для обзора подходов и компромиссов, связанных с проверкой почтового индекса.
npm test
Массачусетский технологический институт
Содержит данные обследования боеприпасов © Корона, авторские права и права на базу данных