[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярные выражения и почтовый адрес
N-size
Здравствуйте!
Помогите пожалуйста составить такой шаблон для функции ereg(), чтобы можно было писать почтовые адреса.

Допустимы символы:
- тире
/ прямой слэш
, запятая
. точка
; точка с запятой
_ знак подчёркивания
- номер
# - номер
пробел

и буквы и цифры русского и английского алфавитов. Длина строки - до 50 символов.
Адрес может содержать в себе эти символы в любой последовательности. Жёстких требований нет. Другие символы - недопустимы.

Спасибо огромное!




Спустя 2 минуты, 59 секунд (8.01.2011 - 18:29) nugle написал(а):
это сдесь сто рас писалось!
А preg_match нель3я сделать?

Спустя 6 минут, 29 секунд (8.01.2011 - 18:35) Invis1ble написал(а):
N-size
юзай поиск по форуму. Если вдруг не найдешь (в чем я сомневаюсь), есть отдельный раздел с регулярными выражениями, там много чего есть (обрати внимание на закрепленные вверху топики)

Спустя 21 минута, 4 секунды (8.01.2011 - 18:56) inpost написал(а):
N-size
Сделай сам, попробуй, а мы уже подправим твои ошибки, и выложи свой код сюда. ereg - устаревшие команды, сейчас используются preg в ПХП.
Более подробно про регулярки можно почитать на: irbis-team.com

Спустя 59 секунд (8.01.2011 - 18:57) N-size написал(а):
Я пытался перед спецсимволами ставить \, но не помогает.
if ($addr1=="") {print "Вы не ввели адрес"; exit;}
if(!ereg("^[а-яА-Яa-zA-Z0-9_\-\.\,\'']{1,20}$", $addr1)) {print "Недопустимые символы"; exit;}

Цитата
А preg_match нель3я сделать?

А разве есть существенные отличия между preg_match() и ereg()?

Спустя 3 минуты, 45 секунд (8.01.2011 - 19:01) sharki написал(а):
N-size
preg_match() в новых версиях пых а ereg() в старых, т.е в 5.3 уже не работает.

Спустя 16 минут, 9 секунд (8.01.2011 - 19:17) N-size написал(а):
Блин ((( Вообщем, поменял ereg на preg_match и то что работало - перестало рабоатать ((. Как всё сделать с помощью preg?

Цитата
Warning: preg_match() [function.preg-match]: No ending delimiter '^' found in ..... on line ...


if(!preg_match("/^[a-z0-9\.\-_]+@[a-z0-9\-_]+\.([a-z0-9\-_]+\.)*?[a-z]+$/is", $_POST['email'])) {print "некорректный E-mail адрес"; exit;}

if(strlen($numb_1)<$length12) {print "Введите корректный номер - это 12-значное число"; exit;}
if(!preg_match("^[0-9]{12}$", $numb_1)) {print "Номер может состоять только из цифр"; exit;}

if(strlen($numb_2)<$length12) {print "IНОМЕР это 12-значное число"; exit;}
if(!preg_match("^[0-9]{12}$", $numb_2)) {print "НОМЕР может состоять только из цифр"; exit;}

if ($first_name=="") {print "Вы не ввели имя"; exit;}
if(!preg_match("^[a-zA-Z0-9_\-]{1,20}$", $first_name)) {print "Введите имя английскими символами"; exit;}

if ($last_name=="") {print "Вы не ввели фамилию"; exit;}
if(!preg_match("^[a-zA-Z0-9_\-]{1,20}$", $last_name)) {print "Введите фамилию английскими символами"; exit;}

if ($addr1=="") {print "Вы не ввели адрес"; exit;}
if(!preg_match("^[a-zA-Z0-9_\-\.\,\'']{1,50}$", $addr1)) {print "Введите адрес английскими символами"; exit;}

if (strlen($index)<"$length5") {print "Введите корректный почтовый индекс (5-6 цифр)"; exit;}
if(!preg_match("/^[0-9]/", $index)) {print "Индекс может состоять только из цифр"; exit;}

Помогите мне пожалуйста конкретно с этими примерами. Время поджимает - нет возможности изучить всю литературу. Где что исправить надо?

Спустя 19 минут, 23 секунды (8.01.2011 - 19:37) Invis1ble написал(а):
N-size
Цитата
Warning: preg_match() [function.preg-match]: No ending delimiter '^' found in ..... on line ...

что-то непонятное, вроде должно работать... попробуй
if(!preg_match('#^[a-z0-9._-]+@[a-z0-9_-]+\.([a-z0-9_-]+\.)*?[a-z]+$#is', $_POST['email'])) {print "некорректный E-mail адрес"; exit;}


UPD. Подправил

Спустя 22 минуты, 15 секунд (8.01.2011 - 19:59) inpost написал(а):
N-size
"Время поджимает" - раньше думать надо было, прежде чем браться за такие проекты!

Спустя 36 минут, 20 секунд (8.01.2011 - 20:35) nugle написал(а):
полистай рhр.su я 3а часа 2 с ними подружился_))

Спустя 59 минут, 23 секунды (8.01.2011 - 21:35) N-size написал(а):
if(!preg_match('#^[a-z0-9._-]+@[a-z0-9_-]+\.([a-z0-9_-]+\.)*?[a-z]+$#is', $_POST['email'])) {print "некорректный E-mail адрес"; exit;}


Invis1ble, как раз-таки
эту строку обрабатывает отлично. Проблемы возникают с остальными.

Цитата
Время поджимает" - раньше думать надо было, прежде чем браться за такие проекты!


по-моему не такая уж и сложная задача. Просто я собирал со всех сайтов по-кусочкам этот код и сам редактировал и доводил до ума. Вот и напоролся на старую статью с функцией ereg() Теперь единственная проблема - как для preg_match() сделать разрешённые символы в [] скобках наравне с [a-zA-Z0-9]. Если Вы говорите что ereg() уже устарел. Хочется ведь всё сделать для будущих поколений, так сказать.. которые и знать не будут про канувший в лету ereg()
))

Спустя 21 минута, 21 секунда (8.01.2011 - 21:56) N-size написал(а):
Всё!! Ура!. До меня дошло. Надо шаблон помещать не просто в ковычки, а в ковычки и прямые слеши. Вот как: "/[......]/"
if(!preg_match("/^[a-z0-9\.\-_]+@[a-z0-9\-_]+\.([a-z0-9\-_]+\.)*?[a-z]+$/is", $_POST['email'])) {print "некорректный E-mail адрес"; exit;}

if(strlen($numb_1)<$length12) {print "Введите корректный номер - это 12-значное число"; exit;}
if(!preg_match("/^[0-9]{12}$/", $numb_1)) {print "Номер может состоять только из цифр"; exit;}

if(strlen($numb_2)<$length12) {print "IНОМЕР это 12-значное число"; exit;}
if(!preg_match("/^[0-9]{12}$/", $numb_2)) {print "НОМЕР может состоять только из цифр"; exit;}

if ($first_name=="") {print "Вы не ввели имя"; exit;}
if(!preg_match("/^[a-zA-Z0-9_\-]{1,20}$/", $first_name)) {print "Введите имя английскими символами"; exit;}

if ($last_name=="") {print "Вы не ввели фамилию"; exit;}
if(!preg_match("/^[a-zA-Z0-9_\-]{1,20}$/", $last_name)) {print "Введите фамилию английскими символами"; exit;}

if ($addr1=="") {print "Вы не ввели адрес"; exit;}
if(!preg_match("/^[a-zA-Z0-9_\-\.\,\/'']{1,50}$", $addr1)) {print "Введите адрес английскими символами"; exit;}

if (strlen($index)<"$length5") {print "Введите корректный почтовый индекс (5-6 цифр)"; exit;}
if(!preg_match("/^[0-9]/", $index)) {print "Индекс может состоять только из цифр"; exit;}

Всем спасибо! :)

Спустя 4 минуты, 8 секунд (8.01.2011 - 22:00) Invis1ble написал(а):
N-size
аааааа..... ну так правильно, ты в остальных регулярках ограничители паттерна пропустил (слеш, к примеру)

Спустя 32 секунды (8.01.2011 - 22:01) Invis1ble написал(а):
N-size
ага, все правильно
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.