Разделите почтовый индекс Великобритании на две основные части, используя Java

Это регулярное выражение для проверки почтовых индексов прекрасно работает

^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) {0,1}[0-9][A-Za-z]{2})$

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

Как это можно сделать в Java?

3 ответа

Решение

Вот официальные регулярные выражения для сопоставления британских почтовых индексов:

http://interim.cabinetoffice.gov.uk/media/291370/bs7666-v2-0-xsd-PostCodeType.htm

Если вы хотите разбить найденный почтовый индекс на две части, разве это не вопрос разделения на пробелы? Две части почтового индекса в Великобритании просто разделены пробелом, верно? В Java это будет:

String[] fields = postcode.split("\\s");

где почтовый индекс - это проверенный почтовый индекс, а поля [] - это массив длиной 2, содержащий первую и вторую части.

Изменить: Если это для проверки ввода пользователя, и вы хотите проверить первую часть, ваше регулярное выражение будет:

Pattern firstPart = Pattern.compile("[A-Z]{1,2}[0-9R][0-9A-Z]?");

Для проверки второй части это:

Pattern secondPart = Pattern.compile("[0-9][A-Z-[CIKMOV]]{2}");

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

const string matchString = @"^(?<Primary>([A-Z]{1,2}[0-9]{1,2}[A-Z]?))(?<Secondary>([0-9]{1}[A-Z]{2}))$";

var regEx = new Regex(matchString);
var match = regEx.Match(Postcode);

var postcodePrimary = match.Groups["Primary"];
var postcodeSecondary = match.Groups["Secondary"];

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

Для этого вы можете использовать недавно открытую библиотеку Google. http://code.google.com/p/libphonenumber/

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