Проверка почтового индекса (почтового индекса США)

Я думал, что люди будут вместе работать над небольшими проектами кода, но я их не вижу, поэтому вот простой вариант:

Код, подтверждающий действительный почтовый индекс США. Я знаю, что существуют базы данных почтовых индексов, но они все еще используются, например, веб-страницы, быстрая проверка, а также тот факт, что почтовые индексы продолжают выдаваться, поэтому вы можете использовать слабую проверку.

Я написал немного о почтовых индексах в стороннем проекте на моей вики / блоге:

https://benc.fogbugz.com/default.asp?W24

Есть также новый, странный тип почтового индекса.

https://benc.fogbugz.com/default.asp?W42

Я могу написать код javascript, но было бы интересно посмотреть, сколько языков мы можем здесь использовать.

В вашем сообщении в блоге указано, что «ZIP + 4 (10 цифр)» после указания, что простой почтовый индекс состоит из 5 цифр. Мне здесь сложно разбираться в математике.

unwind 13.02.2009 18:21

@unwind: ZIP + 4 на самом деле составляет 10 символы, а не 10 цифры. Это 9 цифр в формате 12345-6789. Ссылка на этой странице на ZIP + 4, состоящий из 10 цифр, неверна.

Dave Sherohman 13.02.2009 18:44

хороший момент, я это уточню.

benc 14.02.2009 01:54

Ссылаясь на статью и на странный новый тип почтового индекса. Я предполагаю, что SHOE просто имеет в виду соответствующие номера вашей клавиатуры на телефоне ...

Marijn Huizendveld 15.05.2010 18:27

Буквы кажутся буквальными, поэтому полностью совместимый валидатор либо разрешит символы, либо, возможно, жестко закодирует единственное исключение. Я не нашел дополнительной информации от USPS, чтобы прояснить этот вопрос.

benc 31.05.2010 09:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
39
5
205 705
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

Ответ принят как подходящий

Литерал Javascript Regex:

Почтовые индексы США: /(^\d{5}$)|(^\d{5}-\d{4}$)/

var isValidZip = /(^\d{5}$)|(^\d{5}-\d{4}$)/.test("90210");

Некоторые страны используют Почтовые индексы, что не позволяет этому шаблону.

Вы можете заменить свое тестовое регулярное выражение на / (^ \ d {5} (- \ d {4})? $ /, Чтобы быть немного более кратким. Оно также будет работать немного быстрее во многих механизмах регулярных выражений.

Dave Sherohman 13.02.2009 18:41

@Dave, в вашей оптимизации есть опечатка, отсутствует последний ).

Corey Ballou 12.01.2010 15:20

@cballou: На самом деле он должен удалить первый (. Это не нужно.

mpen 31.10.2011 10:02

/ ^ \ b \ d {5} (- \ d {4})? \ b $ / проверяет либо простые 5-значные, либо 5 + 4 почтовые индексы.

eagspoo 02.11.2012 09:41

Почтовый индекс является почтовый индекс, но не в том же шаблоне, что и большинство других.

Brill Pappin 10.12.2014 19:37

Это не работает для "07029". Что для этого исправить?

ap_snitch 03.03.2015 22:46

Вы имеете в виду проверку адреса? Как и в предыдущем ответе Майка, вам нужно обслуживать остальные 95%.

Что вы можете сделать, это когда пользователь выберет свою страну, а затем включит проверку. Проверка адреса и проверка почтового индекса - это две разные вещи. Проверка ZIP - это просто проверка его целого числа. Проверка адреса - это проверка фактического адреса на точность, предпочтительно для отправки по почте.

Вот функция JavaScript, которая проверяет почтовый индекс / почтовый индекс на основе кода страны. Это допускает несколько либеральное форматирование. Вы также можете добавить кейсы для других стран. Обратите внимание, что в регистре по умолчанию разрешены пустые почтовые индексы, поскольку они используются не во всех странах.

function isValidPostalCode(postalCode, countryCode) {
    switch (countryCode) {
        case "US":
            postalCodeRegex = /^([0-9]{5})(?:[-\s]*([0-9]{4}))?$/;
            break;
        case "CA":
            postalCodeRegex = /^([A-Z][0-9][A-Z])\s*([0-9][A-Z][0-9])$/;
            break;
        default:
            postalCodeRegex = /^(?:[A-Z0-9]+([- ]?[A-Z0-9]+)*)?$/;
    }
    return postalCodeRegex.test(postalCode);
}

FYI Вторая ссылка, относящаяся к почтовым индексам тщеславия, похоже, была первоапрельской шуткой.

Я почти уверен, что вы имеете в виду историю NPR 2004 года (которую я только что нашел). Информация во второй ссылке относится к 2007 году, и я думаю, что одна из статей, которые я прочитал, была на самом деле с сайта USPS (я не сохранял каждую ссылку).

benc 02.10.2008 10:11

Я удивлен, что никто не предложил сделать регулярные выражения почтового индекса Канады нечувствительными к регистру. Можно легко преобразовать ввод из нижнего регистра в верхний, прежде чем переходить туда, куда он идет. Подумайте о пользовательском опыте!

gillytech 22.10.2014 05:15

Чтобы пользователь мог вводить канадский почтовый индекс также и строчными буквами, регулярное выражение должно выглядеть так:

/ ^ ([a-zA-Z] [0-9] [a-zA-Z]) \ s * ([0-9] [a-zA-Z] [0-9]) $ /

Разрешены ли строчные буквы? Я быстро просмотрел статью в википедии, и все примеры, кажется, написаны заглавными буквами, но это не было явно указано.

benc 19.02.2009 00:35

function isValidUSZip(sZip) {
   return /^\d{5}(-\d{4})?$/.test(sZip);
}

Если вы делаете для Канады, помните, что не все буквы действительны

Эти буквы недействительны: D, F, I, O, Q или U И буквы W и Z не используются как первая буква. Также некоторые люди используют необязательный пробел после 3-го символа.

Вот регулярное выражение для почтового индекса Канады:

new RegExp(/^[abceghjklmnprstvxy][0-9][abceghjklmnprstvwxyz]\s?[0-9][abceghjklmnprstvwxyz][0-9]$/i)

Последний я делает регистр нечувствительным.

Это хорошее JavaScript-решение вашей проблемы с проверкой:

/\b\d{5}-\d{4}\b/

Один из способов проверить действительный почтовый индекс Канады -

function isValidCAPostal(pcVal) {
   return ^[A-Za-z][0-9][A-Za-z]\s{0,1}[0-9][A-Za-z][0-9]$/.test(pcVal);
}

Надеюсь, это кому-то поможет.

Вот один из файла additional-methods.js плагина jQuery Validate ...

jQuery.validator.addMethod("zipUS", function(value, element) {
    return /(^\d{5}$)|(^\d{5}-\d{4}$)/.test(value);
}, "Please specify a valid US zip code.");

РЕДАКТИРОВАТЬ: поскольку приведенный выше код является частью подключаемого модуля jQuery Validate, он зависит от метода .addMethod().

Удалите зависимость от плагинов и сделайте ее более общей ....

function checkZip(value) {
    return (/(^\d{5}$)|(^\d{5}-\d{4}$)/).test(value);
};

Пример использования: http://jsfiddle.net/5PNcJ/

Поскольку я работаю в индустрии почтовых услуг в течение 17 лет, я видел все виды ввода данных в этой области, и мне интересно, сколько людей не знают своего адреса, как это определено USPS. Я до сих пор вижу такие адреса:

Колледж XYZ
ИТ-отдел Город, ул. ЗИП

Хуже всего то, что почта доставляется в 99% случаев, в остальном 1%, ну, что касается неполного адреса, она возвращается должным образом.

В более раннем сообщении кто-то упомянул USPS CASS, что это программное обеспечение не является бесплатным.

Чтобы использовать регулярное выражение для тестера почтового индекса, я использую выражения, чтобы определить, какой почтовый индекс - в США, Калифорнии, Великобритании или Австралии. Я видел выражения для Японии и других, которые только добавляют сложности при выборе правильной страны, которой принадлежит почтовый индекс.

Безусловно, лучший ответ - использовать раскрывающиеся списки для штата и страны. Затем используйте таблицы для дальнейшей проверки, если это необходимо. Просто чтобы вы имели представление о 84052 допустимых комбинациях почтовых индексов US City St Zip, состоящих только из первых 5 цифр. Согласно ISO 249 действующих стран и 65 штатов / территорий США.

Существуют также классы Military, PO Box only и Unique. KISS применяется здесь.

Чтобы продолжить мой ответ, UPS и FedEx не могут доставить на почтовый ящик без использования USPS в качестве окончательного обработчика. Большинство программ доставки не позволяют использовать почтовый ящик для своих стандартных услуг. Примеры почтовых ящиков: 00604 - RAMEY, PR и 06141 - HARTFORD, CT.

Вся потребность в проверке почтовых индексов может быть действительно вопросом того, как далеко вы зайдете, каков бюджет, каковы сроки.

Как и все с выражениями test, test, test и test again. У меня было выражение для проверки состояния, и я обнаружил, что YORK прошел, когда он должен потерпеть неудачу. Один раз из тысячи кто-то въехал в Нью-Йорк, Нью-Йорк 10279, тьфу.

Также имейте в виду, что USPS не любит таких знаков препинания, как N. Market St., а также имеет очень конкретные допустимые сокращения для таких вещей, как Lane, Place, North, Corporation и т. д.

В Drupal 7 также есть простое решение, которое позволит вам проводить валидацию в нескольких странах.

https://drupal.org/project/postal_code_validation

Вам также понадобится этот модуль
https://drupal.org/project/postal_code

Протестируйте в http://simplytest.me/

Предлагаем вам взглянуть на API адресной информации USPS. Вы можете проверить почтовый индекс и получить адреса в стандартном формате. https://www.usps.com/business/web-tools-apis/address-information.htm

Другие вопросы по теме