Помощник
|
Как проверить email-адрес на правильность?, Регулярные выражения |
RussiaStudent
|
Сообщение
#1
|
||
|
|
||
|
|||
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 |
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 |
27.6.2009, 13:11;
Ответить: ZiTosS
Сообщение
#4
|
|
Banderas, Во первых не правильно функция написана
Как минимум так: $gav = strpos($m, '@'); $point = strtpos($m, '.'); Но тут всплывает самая здостная ошибка, которая не предвидится... Попробуй как вот такой email адрес: mynik.admin@mail.ru Всё, скрипт остановится на первой точке, что уже гарантированно будет неверно. Так же не учтено, что до @ можно вводить только определённые символы. Например в адресе ты никогда не увидишь ~!"#$%&* это всё должно исключаться моментом. Твой же скрипт не осуществляет подобного в действительности. Поэтому го сразу отсекаем. RussiaStudent, Я попробую расписать Сам давно регулярками не занимался. |([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
|
Сообщение
#5
|
|
Спасибо всем большое за ответы.
ZiTosS, а вообще данный способ можно использовать для проверки email адресов и как это сделать? Буду очень признателен. |
|
|
Banderas |
28.6.2009, 1:06;
Ответить: Banderas
Сообщение
#6
|
|
2*ZiTosS* Согласен с тобой. Только седня днем прочитал о регулярных выражениях и примерно понял как их использовать Мою функцию можно усовершенствовать, но в этом нет потребности...
Попробую напечатать свой код(может быть неверным, но у меня пашет ): ^[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 'Все правильно!'; } |
|
|
ZiTosS |
28.6.2009, 11:36;
Ответить: ZiTosS
Сообщение
#7
|
|
Banderas,
Твой пример конечно рабочий. Но я могу ввести почтовый ящик с зоной больше 100 символов... Разве такое возможно? xD У тебя нет ограничений на количество символов. А вот то что ограничил строку ^ и $ это правильно. Пример показал верный. |
|
|
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-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 |
Текстовая версия | Сейчас: 25.4.2024, 8:00 |