Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Трабл с регулярными выражениями

9.5K
25 января 2007 года
Zemik
15 / / 08.10.2005
Помогите! допустим есть форма в которой пользователь вводит свои телефон и мэйл и вот при проверке мэйла на валидность выплывает
ошибка дело в том, что при проверке на корректность мэйла
все символы до @ должны быть либо цифрами, буквами, знаком подчеркивания или дефиса.

все это учитывается кроме знака дефиса т.е.
при виде дефиса он мне сообщение о том, что я ввел некорректный мэйл


вот шаблон регулярного выражения помгите пожалуйста выправить его:

 
Код:
$mailpattern="([a-zA-Z0-9|.|-|_]{4,18})@(([a-zA-Z0-9|.|-]{2,10}).([a-z]{2,4}))";
  if( !eregi($mailpattern,$mail) )
     $error="<tr><td class=titlemenu colspan=2 align=left><font class=star>Введенный вами адрес электронной почты не является корректным</font></td></tr>\n<br>";
92
25 января 2007 года
Тень Пса
2.2K / / 19.10.2006
экранируй служебные символы, если я не ошибаюсь, то "-" это служебный символ для RegExp, то есть просто в условиях поставь |\-| вместо |-|
:rolleyes:

если я не ошибся то так
 
Код:
([a-zA-Z0-9|.|[COLOR=Red]\[/COLOR]-|_]{4,18})@(([a-zA-Z0-9|.|[COLOR=Red]\[/COLOR]-]{2,10}).([a-z]{2,4}))
13
25 января 2007 года
RussianSpy
3.0K / / 04.07.2006
Сдается мне (Telepat mode activated), что нужно символ | заменить на \ дабы получить вот это:

 
Код:
/[a-zA-Z0-9\.\-_]{4,18})@(([a-zA-Z0-9\.\-]{2,10}).([a-z]{2,4})/


и вместо ereg_* функций лучше использовать preg_*
11K
25 января 2007 года
.nornad
125 / / 04.01.2007
Замени на
 
Код:
$mailpattern = "([-\da-zA-Z_]{4,18})@([-\da-zA-Z]{2,10}[.][a-zA-Z]{2,4})";

а то твой вариант допускает ещё и символ "|". :)

Можно выражение ещё укоротить, но для этого надо посмотреть на рег.выражения в РНР (скорее всего, как в перле, но отличия иногда встречаются).

Попробуй, так (должно сработать, если всё, как в перле):
сначала переводи все символы в нижний регистр, а потом уже проверяй по шаблону (проверка по шаблону работает достаточно медленно и её лучше стараться делать попроще). Вот шаблон:
 
Код:
$mailpattern = "([a-z][-\d\w]{3,17})@([a-z][-\da-z]{1,9}[.][a-z]{2,4})";

Этот шаблон не позволяет в имени ящика ставить первым символом ничего, кроме буквы. В имени домена второго уровня первым символом тоже должна быть буква, а подчёркивание здесь запрещено.
11K
26 января 2007 года
.nornad
125 / / 04.01.2007
Небольшое дополнение (а то в предыдущем примере были некоторые "вольности" вроде разрешения иметь последним символом имени тире):
 
Код:
$mailpattern = "[a-z][-\d\w]{3,16}[a-z]@[a-z][-\da-z]{1,8}[a-z][.][a-z]{2,4})";


Перед проверкой соответствия шаблону строку надо привести к нижнему регистру.
12
26 января 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: .nornad

Перед проверкой соответствия шаблону строку надо привести к нижнему регистру.


Излишне. Есть модификатор i ;)

12
26 января 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: Zemik
Помогите! допустим есть форма в которой пользователь вводит свои телефон и мэйл и вот при проверке мэйла на валидность выплывает
ошибка дело в том, что при проверке на корректность мэйла
все символы до @ должны быть либо цифрами, буквами, знаком подчеркивания или дефиса.

все это учитывается кроме знака дефиса т.е.
при виде дефиса он мне сообщение о том, что я ввел некорректный мэйл


вот шаблон регулярного выражения помгите пожалуйста выправить его:

 
Код:
$mailpattern="([a-zA-Z0-9|.|-|_]{4,18})@(([a-zA-Z0-9|.|-]{2,10}).([a-z]{2,4}))";
  if( !eregi($mailpattern,$mail) )
     $error="<tr><td class=titlemenu colspan=2 align=left><font class=star>Введенный вами адрес электронной почты не является корректным</font></td></tr>\n<br>";


http://www.yandex.ru/yandsearch?stype=www&nl=0&text=%F0%E5%E3%F3%EB%FF%F0%ED%EE%E5+%E2%FB%F0%E0%E6%E5%ED%E8%E5+%E4%EB%FF+%EF%F0%EE%E2%E5%F0%EA%E8+e+mail+%EC%FB%EB%E0
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=3735

11K
26 января 2007 года
.nornad
125 / / 04.01.2007
Цитата: alekciy
Излишне. Есть модификатор i ;)


Спасибо за дополнение. Сам юзал рег.выражения в перле и на жабе. У последней модификаторов вообще нету. Поэтому и не был уверен, есть ли они в РНР. :)

Кстати, по второй ссылке (форум) в обсуждении шаблон дан не очень хороший - он позволяет, например, поставить первым символом в имени дефис. ;)

12
26 января 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: .nornad
Спасибо за дополнение. Сам юзал рег.выражения в перле и на жабе. У последней модификаторов вообще нету.


Может быть бы будешь удивлен, но они там есть ;) . Целых два g и i .

Цитата: .nornad

Кстати, по второй ссылке (форум) в обсуждении шаблон дан не очень хороший - он позволяет, например, поставить первым символом в имени дефис. ;)


Ага. Но в поиске по этому делу много ссылок. Пусть автор топика поишеть, а найдя еще немного и подумает.

9.5K
26 января 2007 года
Zemik
15 / / 08.10.2005
спасибо всем поправил!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог