2012-03-05 3 views
0

Я пытаюсь сопоставить уличные адреса, содержащие улицу и номер.Регулярное выражение для почтового адреса

Мне нужно выражение, чтобы соответствовать словам для названия улицы, а затем номер.

Например, я хочу совместить «somestreet 25», «другую улицу 23», «третью улицу 190», но не «a_fourth street 67».

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

Пока что у меня есть /^[a-zA-Z]+([\s][a-zA-Z]+)([\s][0-9]){1,4}$/, но, разумеется, он не работает.

--- EDIT ---

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

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

Все, что я хочу, это не дать им получить спам с глупыми символами @ # $ в адресе и иметь для них достойное чтение для форматирования адресов.

+0

Что делает 'a_fourth улице 67' не совпадают? –

+0

@ gms8994 подчеркивание. – ppp

+1

У вас нет улиц из стран, которые перенесли номер первым? Или области, которые дают названиям зданий, а не номерам? Или многоквартирные дома с буквами для идентификации части здания? (221B Бейкер-стрит)? – Quentin

ответ

3

Это должно работать на ваших примерах:

/^[a-zA-Z]([a-zA-Z-]+\s)+\d{1,4}$/ 
+0

Вам не нужно добавлять \ if - это первый или последний символ. Также ваш шаблон будет соответствовать '- - Дороге 38', который не является правильным. –

+0

Прямо по обоим пунктам! Отредактировано для исправления. –

+0

Почему он чувствителен к регистру? Вы можете сократить некоторый код с помощью модификатора 'i'. –

1

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

/^([a-z- ]+)\s+([0-9]+)$/i 

А как насчет меня? Я живу на 30th Ave.

Кстати, я использовал [0-9]+ для одного или нескольких номеров в конце, а не для вашего {1,4}. Если у вас не должно быть больше 4, переведите его обратно в диапазон {1,4}.

+0

Вы не живете в Греции, поэтому мой клиент по-настоящему заботится о вас :). Я делаю, и я благодарю вас за ваше время. – ppp

+0

Ваш шаблон будет соответствовать '- - Дороге 38', который является неправильным –

1

Это сделает

/^([A-Z][-A-Z ]+)\s+(\d+)$/i 

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

+0

Приложение предназначено для ресторана, а соглашение о формате дат (название улицы), за которым следует (число), поэтому здесь применяются регулярные выражения. – ppp