Я думал, что люди будут вместе работать над небольшими проектами кода, но я их не вижу, поэтому вот простой вариант:
Код, подтверждающий действительный почтовый индекс США. Я знаю, что существуют базы данных почтовых индексов, но они все еще используются, например, веб-страницы, быстрая проверка, а также тот факт, что почтовые индексы продолжают выдаваться, поэтому вы можете использовать слабую проверку.
Я написал немного о почтовых индексах в стороннем проекте на моей вики / блоге:
https://benc.fogbugz.com/default.asp?W24
Есть также новый, странный тип почтового индекса.
https://benc.fogbugz.com/default.asp?W42
Я могу написать код javascript, но было бы интересно посмотреть, сколько языков мы можем здесь использовать.
@unwind: ZIP + 4 на самом деле составляет 10 символы, а не 10 цифры. Это 9 цифр в формате 12345-6789. Ссылка на этой странице на ZIP + 4, состоящий из 10 цифр, неверна.
хороший момент, я это уточню.
Ссылаясь на статью и на странный новый тип почтового индекса. Я предполагаю, что SHOE просто имеет в виду соответствующие номера вашей клавиатуры на телефоне ...
Буквы кажутся буквальными, поэтому полностью совместимый валидатор либо разрешит символы, либо, возможно, жестко закодирует единственное исключение. Я не нашел дополнительной информации от USPS, чтобы прояснить этот вопрос.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Литерал Javascript Regex:
Почтовые индексы США: /(^\d{5}$)|(^\d{5}-\d{4}$)/
var isValidZip = /(^\d{5}$)|(^\d{5}-\d{4}$)/.test("90210");
Некоторые страны используют Почтовые индексы, что не позволяет этому шаблону.
Вы можете заменить свое тестовое регулярное выражение на / (^ \ d {5} (- \ d {4})? $ /, Чтобы быть немного более кратким. Оно также будет работать немного быстрее во многих механизмах регулярных выражений.
@Dave, в вашей оптимизации есть опечатка, отсутствует последний ).
@cballou: На самом деле он должен удалить первый (. Это не нужно.
/ ^ \ b \ d {5} (- \ d {4})? \ b $ / проверяет либо простые 5-значные, либо 5 + 4 почтовые индексы.
Почтовый индекс является почтовый индекс, но не в том же шаблоне, что и большинство других.
Это не работает для "07029". Что для этого исправить?
Вы имеете в виду проверку адреса? Как и в предыдущем ответе Майка, вам нужно обслуживать остальные 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 (я не сохранял каждую ссылку).
Я удивлен, что никто не предложил сделать регулярные выражения почтового индекса Канады нечувствительными к регистру. Можно легко преобразовать ввод из нижнего регистра в верхний, прежде чем переходить туда, куда он идет. Подумайте о пользовательском опыте!
Чтобы пользователь мог вводить канадский почтовый индекс также и строчными буквами, регулярное выражение должно выглядеть так:
/ ^ ([a-zA-Z] [0-9] [a-zA-Z]) \ s * ([0-9] [a-zA-Z] [0-9]) $ /
Разрешены ли строчные буквы? Я быстро просмотрел статью в википедии, и все примеры, кажется, написаны заглавными буквами, но это не было явно указано.
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
В вашем сообщении в блоге указано, что «ZIP + 4 (10 цифр)» после указания, что простой почтовый индекс состоит из 5 цифр. Мне здесь сложно разбираться в математике.