X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Как проверить email-адрес на правильность?, Регулярные выражения
RussiaStudent
RussiaStudent
Topic Starter сообщение 26.6.2009, 15:27; Ответить: RussiaStudent
Сообщение #1


Привет всем!
Вот задался вопросом, как составить регулрное выражение, чтобы оно пропускало все email адреса пользователей.
Но не пропускала не подходящие под регулярное выражение адреса.

В интернете нашёл вот такой вариант
|([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})|is

Но не могу его разобрать, что и как здесь?
Заранее благодарен. Жду помощи.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
v1ex
v1ex
сообщение 26.6.2009, 15:35; Ответить: v1ex
Сообщение #2


1) http://phpclub.ru/detail/article/regexp_1
2) http://phpclub.ru/detail/article/regexp_2
Читаем и разбираемся.


Поблагодарили: (0)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
сообщение 26.6.2009, 15:55; Ответить: Banderas
Сообщение #3


Хз, можно попробовать вот такую, но сам не знаю рабочая ли она....
function checkmail($m) {
     $gav = strpos($m, '@');
     $point = strtpos($m, '@');
return (
     $gav !== false &&
     $point !== false &&
     $point - $gav >= 3
          );
}


Поблагодарили: (0)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 27.6.2009, 13:11; Ответить: ZiTosS
Сообщение #4


Banderas, Во первых не правильно функция написана
Как минимум так:
     $gav = strpos($m, '@');
     $point = strtpos($m, '.');


Но тут всплывает самая здостная ошибка, которая не предвидится...
Попробуй как вот такой email адрес: mynik.admin@mail.ru
Всё, скрипт остановится на первой точке, что уже гарантированно будет неверно.

Так же не учтено, что до @ можно вводить только определённые символы. Например в адресе ты никогда не увидишь ~!"#$%&* это всё должно исключаться моментом. Твой же скрипт не осуществляет подобного в действительности.
Поэтому го сразу отсекаем.

RussiaStudent,
Я попробую расписать :lol: Сам давно регулярками не занимался.
|([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})|is

И так:
Всё что находится между | И | регулярное выражение. is в конце это два модификатора
i (PCRE_CASELESS)

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

s (PCRE_DOTALL)

Если данный модификатор используется, метасимвол "точка" в шаблоне соответствует всем символам, включая перевод строк. Без него - всем, за исключением переводов строк. Этот модификатор эквивалентен записи /s в Perl. Класс символов, построенный на отрицании, например [^a], всегда соответствует переводу строки, независимо от наличия этого модификатора.

Начнём разбирать само регулярное выражение:

Всё что находится между () называется содержимым кармана. Эти карманы нумеруются слева на права от 1 до количества этих корманов.

Расcмотрим первый карман:
Он соответствует названию почтового ящика
([a-z0-9_\.\-]{1,20})

[a-z0-9_\.\-] - означает что в строке может встретиться символ английского алфавита от a до z как в верхнем так и в нижнем регистре, может встретиться число от 0 до 9, а так же символы "_", "." и "-"
Некоторые символы не случайно предварены символом \ - экранировки. Он исключает возможность использования символов в качестве управляющих.
{1,20} - означает что последовательность данной строки колеблется от 1 до 20 символов.

Далее после первого кармана идёт символ @ - как говорится, сабака она и в африке сабака xD

Расcмотрим второй карман:
Он соответствует имени службы предоставляющей почту.
([a-z0-9\.\-]{1,20})

Всё то же самое что и в первом, только нет присутствия символа "_"

Далее после второго кармана идёт символ ., он пециально предварён \ - экранировка.

Расcмотрим третий карман:
Он соответствует зоне
([a-z]{2,4})

[a-z] - означает что в строке может встретиться символ английского алфавита от a до z как в верхнем так и в нижнем регистре.
{2,4} - означает что последовательность данной строки колеблется от 2 до 4 символов.

----------------------------------------------------------------
Подведём итог:
Данное регулярное выражение не идеально, так как не имеет начала и конца. Тоесть до имени почтового ящика можно вставить любую последовательность символов и после так же можно вставить. 20 символов для службы предоставляющей услуги почты, это слишком много...


Поблагодарили: (0)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
RussiaStudent
RussiaStudent
Topic Starter сообщение 27.6.2009, 19:49; Ответить: RussiaStudent
Сообщение #5


Спасибо всем большое за ответы.

ZiTosS, а вообще данный способ можно использовать для проверки email адресов и как это сделать?
Буду очень признателен.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
сообщение 28.6.2009, 1:06; Ответить: Banderas
Сообщение #6


2*ZiTosS* Согласен с тобой. Только седня днем прочитал о регулярных выражениях и примерно понял как их использовать :lol: Мою функцию можно усовершенствовать, но в этом нет потребности...
Попробую напечатать свой код(может быть неверным, но у меня пашет:( ):
^[a-z0-9_\.\-]+@[a-z0-9\.\-]+\.[a-z0-9\-\.]

Правильный код переписан с книги:
^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\.\-]+$

Как использовать приведённый выше код? С помощью функции eregi(), которая ищет соответствие, указанные в 'symbols', в строке $string, а результат выдает в виде масива $matches. eregi() отличается от ereg() только чувствительностью к регистру.
eregi('symbols', $string, $matches)

На деле:
if (!eregi('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\.\-]+$', $email)) {
    echo 'Электронный адрес некорректный!';
    exit;
}  
    else
{
    echo 'Все правильно!';
}


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 28.6.2009, 11:36; Ответить: ZiTosS
Сообщение #7


Banderas,
Твой пример конечно рабочий. Но я могу ввести почтовый ящик с зоной больше 100 символов... Разве такое возможно? xD
У тебя нет ограничений на количество символов. А вот то что ограничил строку ^ и $ это правильно.
Пример показал верный.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
artyom_mw
artyom_mw
сообщение 25.7.2009, 18:34; Ответить: artyom_mw
Сообщение #8


по RFC
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])


Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Как в пушсетках покупают по 100-200 тысяч кликов за день?
2 Boymaster 685 Вчера, 17:52
автор: Boymaster
Открытая тема (нет новых ответов) Обучение Email Рассылкам + Софт Для Автоматизации (100к в сутки с сервера)
10 zennoboss 4659 Вчера, 5:20
автор: Skyworker
Горячая тема (нет новых ответов) Как вы отдыхаете от работы за компом
151 adw-kupon.ru 19854 23.4.2024, 13:52
автор: Vmir
Открытая тема (нет новых ответов) Как вы бросили работу и перешли на заработок с сайтов?
20 uahomka 3465 23.4.2024, 11:54
автор: Skyworker
Горячая тема (нет новых ответов) Как вывести деньги в Украине с заблокированного Юмани ?
30 freeax 5038 20.4.2024, 16:49
автор: Liudmila


 



RSS Текстовая версия Сейчас: 25.4.2024, 8:00
Дизайн