Каждый объект знает свой собственный тип во время выполнения (доступен через getClass()
). Стирание типов - это когда универсальные типы (то есть List<T>
) «забывают», какой тип они имеют во время выполнения, а это означает, что JVM не может определить разницу между a List<Integer>
и a List<String>
; у него просто два List
с. Это может быть продемонстрировано тем фактом, что new ArrayList<Integer>().getClass() == new ArrayList<String>().getClass()
оценивается как истинное.
Нет ни одного.
Почтовый / почтовые индексы во всем мире не следуют за общим шаблоном. В некоторых странах они составлены числами, в других они могут быть комбинациями чисел буквы, некоторые могут содержать пробелы, точки других, количество символов может варьироваться от два по крайней мере до шести...
то, Что Вы могли сделать (теоретически), создают отдельный regex для каждой страны в мире, не рекомендуемый IMO. Но Вы все еще отсутствовали бы на части проверки: почтовый индекс 12345
может существовать, но 12346
не, возможно 12344
не существует также. Как Вы проверяете на это с regex?
Вы не можете.
Учитывая, что существует столько пограничных случаев для каждой страны (например, лондонские адреса могут использовать немного отличающийся формат для остальной части Великобритании), я не думаю, что существует окончательный regex кроме, возможно:
[0-9a-zA-Z]+
Лучше всего движения с довольно широким шаблоном (хорошо не совсем настолько же широко как вышеупомянутое), или обработка каждая страна/регион с определенным собственным шаблоном!
ОБНОВЛЕНИЕ: Однако может быть возможно динамично создать regex основанное на большом количестве меньших, регион определенные правила - не уверенный в производительности хотя!
Партии страны определенные шаблоны могут быть найдены на сайт RegExLib .
Как отмечено в другом месте изменение во всем мире огромно. И даже если что-то, что соответствует шаблону, не означает, что он существует.
Затем конечно, существует много мест, где почтовые индексы не используются (например, очень или Ирландия).
Почему Вы делаете это и почему Вы заботитесь? Как Tom Ritter указал, не имеет значения, есть ли у Вас даже почтовый индекс вообще, а тем более допустимо ли это или нет, до и если Вы на самом деле не собираетесь быть отправкой чего-то к тому адресу. Даже если Вы ожидаете, что будете отправлять им что-то когда-нибудь , который не означает, что Вам нужен индекс сегодня .
Проблема будет этим, у Вас, вероятно, нет хороших средств не отставания от изменяющихся требований индекса стран с другой стороны земного шара и который Вы не совместно используете общих языков. Если у Вас нет достаточно большого бюджета для отслеживания этого, Вы - почти наверняка более обеспеченное предоставление ответственности проверки адресов к Google или Yahoo.
Обе компании обеспечивают поиск адреса facuilities через программируемый API.
В зависимости от Вашего приложения Вы могли бы хотеть реализовать соответствие regex для стран, где большинство Ваших посетителей происходит, и никакая проверка для остальных (примите что-либо).
Мы используем следующее:
Канада
([A-Z]{1}[0-9]{1}){3} //We raise to upper first
Америка
[0-9]{5} //-or-
[0-9]{5}-[0-9]{4} //10 digit zip
Другой
Принимает, как
Это похоже на хорошую ссылку , хотя это не находится в Regex.
Действительно, если Вы не на самом деле поставка что-то Вашим пользователям, я не думаю, что это стоит усилия. И если Вы поставка это, существуют инструменты/сервисы очистки адреса, которые можно изучить для создания этого путем легче на себе.
Попытка покрыть целый мир одним регулярным выражением не абсолютно возможна, и конечно не выполнима или рекомендована.
для Не сигналения моего собственного рога но я записал некоторые довольно полные регулярные выражения, которые можно найти полезным.
Basic validation:
^[ABCEGHJ-NPRSTVXY]{1}[0-9]{1}[ABCEGHJ-NPRSTV-Z]{1}[ ]?[0-9]{1}[ABCEGHJ-NPRSTV-Z]{1}[0-9]{1}$
Extended validation:
^(A(0[ABCEGHJ-NPR]|1[ABCEGHK-NSV-Y]|2[ABHNV]|5[A]|8[A])|B(0[CEHJ-NPRSTVW]|1[ABCEGHJ-NPRSTV-Y]|2[ABCEGHJNRSTV-Z]|3[ABEGHJ-NPRSTVZ]|4[ABCEGHNPRV]|5[A]|6[L]|9[A])|C(0[AB]|1[ABCEN])|E(1[ABCEGHJNVWX]|2[AEGHJ-NPRSV]|3[ABCELNVYZ]|4[ABCEGHJ-NPRSTV-Z]|5[ABCEGHJ-NPRSTV]|6[ABCEGHJKL]|7[ABCEGHJ-NP]|8[ABCEGJ-NPRST]|9[ABCEGH])|G(0[ACEGHJ-NPRSTV-Z]|1[ABCEGHJ-NPRSTV-Y]|2[ABCEGJ-N]|3[ABCEGHJ-NZ]|4[ARSTVWXZ]|5[ABCHJLMNRTVXYZ]|6[ABCEGHJKLPRSTVWXZ]|7[ABGHJKNPSTXYZ]|8[ABCEGHJ-NPTVWYZ]|9[ABCHNPRTX])|H(0[HM]|1[ABCEGHJ-NPRSTV-Z]|2[ABCEGHJ-NPRSTV-Z]|3[ABCEGHJ-NPRSTV-Z]|4[ABCEGHJ-NPRSTV-Z]|5[AB]|7[ABCEGHJ-NPRSTV-Y]|8[NPRSTYZ]|9[ABCEGHJKPRSWX])|J(0[ABCEGHJ-NPRSTV-Z]|1[ACEGHJ-NRSTXZ]|2[ABCEGHJ-NRSTWXY]|3[ABEGHLMNPRTVXYZ]|4[BGHJ-NPRSTV-Z]|5[ABCJ-MRTV-Z]|6[AEJKNRSTVWYXZ]|7[ABCEGHJ-NPRTV-Z]|8[ABCEGHLMNPRTVXYZ]|9[ABEHJLNTVXYZ])|K(0[ABCEGHJ-M]|1[ABCEGHJ-NPRSTV-Z]|2[ABCEGHJ-MPRSTVW]|4[ABCKMPR]|6[AHJKTV]|7[ACGHK-NPRSV]|8[ABHNPRV]|9[AHJKLV])|L(0[[ABCEGHJ-NPRS]]|1[ABCEGHJ-NPRSTV-Z]|2[AEGHJMNPRSTVW]|3[BCKMPRSTVXYZ]|4[ABCEGHJ-NPRSTV-Z]|5[ABCEGHJ-NPRSTVW]|6[ABCEGHJ-MPRSTV-Z]|7[ABCEGJ-NPRST]|8[EGHJ-NPRSTVW]|9[ABCGHK-NPRSTVWYZ])|M(1[BCEGHJ-NPRSTVWX]|2[HJ-NPR]|3[ABCHJ-N]|4[ABCEGHJ-NPRSTV-Y]|5[ABCEGHJ-NPRSTVWX]|6[ABCEGHJ-NPRS]|7[AY]|8[V-Z]|9[ABCLMNPRVW])|N(0[ABCEGHJ-NPR]|1[ACEGHKLMPRST]|2[ABCEGHJ-NPRTVZ]|3[ABCEHLPRSTVWY]|4[BGKLNSTVWXZ]|5[ACHLPRV-Z]|6[ABCEGHJ-NP]|7[AGLMSTVWX]|8[AHMNPRSTV-Y]|9[ABCEGHJKVY])|P(0[ABCEGHJ-NPRSTV-Y]|1[ABCHLP]|2[ABN]|3[ABCEGLNPY]|4[NPR]|5[AEN]|6[ABC]|7[ABCEGJKL]|8[NT]|9[AN])|R(0[ABCEGHJ-M]|1[ABN]|2[CEGHJ-NPRV-Y]|3[ABCEGHJ-NPRSTV-Y]|4[AHJKL]|5[AGH]|6[MW]|7[ABCN]|8[AN]|9[A])|S(0[ACEGHJ-NP]|2[V]|3[N]|4[AHLNPRSTV-Z]|6[HJKVWX]|7[HJ-NPRSTVW]|9[AHVX])|T(0[ABCEGHJ-MPV]|1[ABCGHJ-MPRSV-Y]|2[ABCEGHJ-NPRSTV-Z]|3[ABCEGHJ-NPRZ]|4[ABCEGHJLNPRSTVX]|5[ABCEGHJ-NPRSTV-Z]|6[ABCEGHJ-NPRSTVWX]|7[AENPSVXYZ]|8[ABCEGHLNRSVWX]|9[ACEGHJKMNSVWX])|V(0[ABCEGHJ-NPRSTVWX]|1[ABCEGHJ-NPRSTV-Z]|2[ABCEGHJ-NPRSTV-Z]|3[ABCEGHJ-NRSTV-Y]|4[ABCEGK-NPRSTVWXZ]|5[ABCEGHJ-NPRSTV-Z]|6[ABCEGHJ-NPRSTV-Z]|7[ABCEGHJ-NPRSTV-Y]|8[ABCGJ-NPRSTV-Z]|9[ABCEGHJ-NPRSTV-Z])|X(0[ABCGX]|1[A])|Y(0[AB]|1[A]))[ ]?[0-9]{1}[ABCEGHJ-NPRSTV-Z]{1}[0-9]{1}$
^[0-9]{5}(-[0-9]{4})?$
^([A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW])\ [0-9][ABD-HJLNP-UW-Z]{2}|(GIR\ 0AA)|(SAN\ TA1)|(BFPO\ (C\/O\ )?[0-9]{1,4})|((ASCN|BBND|[BFS]IQQ|PCRN|STHL|TDCU|TKCA)\ 1ZZ))$
не возможно гарантировать точность, на самом деле не отправляя что-то по почте к адресу и сообщению человека, когда они получают его, но мы можем сузить вещи вниз путем устранения случаев, которые мы знаем, плохи.
Указать точный почтовый индекс нельзя по причинам, не связанным с доставкой. Туристическим агентствам, осуществляющим туры, которые пересекают границы (конечно, за исключением еврозоны), эта информация необходима заранее, чтобы предоставить властям. Часто эту информацию вводит агент, который может быть знаком с такими вещами, а может и не знать. ЛЮБОЙ метод, который может сократить количество ошибок, - это Хорошая идея ™
Однако написать регулярное выражение, которое бы охватывало все почтовые индексы мира, было бы безумием.