Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
-1 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 5
1

Почты регуляркой (M.a_И-л.-_1@M.a_И-л.-_1)

22.04.2012, 20:26. Показов 1126. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пока еще не нашел ни одной регулярки в просторах интернета, которая пропустит M.a_И-л.-_1@M.a_И-л.-_1.
Почему именно такой адрес в качестве шаблона?
Уже есть: майл.рф по-русски.рф, почта.рф
Не за горами какой-нибудь Емайл.рф с предосавлением почтовых адресов, да и владельцы доменов РФ уже имеют адреса шаблона info@домен.рф, также уже испытывается http://пример.испытание/!
Итак, собственно вопрос: какой регуляркой одобрить такие адреса как:
инфо@домен2.домен1
инфо@домен2.домен1
инфо@домен-3.домен_2.домен1
I.N.ф_о-1@D_оме_n-3.Доm-ен_2.домен1
I.N.ф_о-1@225.225.225.225
I.N.ф_о-1@1.1.1.1


Вот моя регулярка, но она почему-то мне не очень нравится, мне кажется можно получше составить...
PHP
1
if (!preg_match("|^([a-zа-я0-9_\.\-]+)@([a-zа-я0-9_\.\-]+)|is", strtolower($emai)))
например:
PHP
1
2
if (!preg_match("#^([a-Zа-Я0-9\.\-]+)@([a-Zа-Я0-9\.\-]+$#)", "$emai"))
{неверно}else{верно}
PS возможно в этой теме появится первая регулярка для почтовых адресов, которая не будет вызывать нереканий даже у самых опытных программистов.
Есть ли на этом форуме достойные программисты, способные составить НЕ говнокод, решающий эту задачу?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2012, 20:26
Ответы с готовыми решениями:

Подсказать с регуляркой
есть текст такого вида: Как мне выковырять Без Тебя Ни Ночи, Ни Дня и получить в виде строки?...

Дата регуляркой
Доброго времени суток! Не поможете? Проблемка произошла. Есть такие, например, строки: 1....

Помогие с регуляркой.
Здравствуйте. Есть текст, допустим: Регуля́рные выраже́ния (<a...

Распарсить регуляркой
Доброго времени суток. Есть строка ...

14
368 / 43 / 8
Регистрация: 11.04.2012
Сообщений: 149
Записей в блоге: 1
22.04.2012, 22:07 2
Код
   /^(.+)(^[@])@(.+)(^[\.])\.(.+)$/
вот простейшая регулярка
0
-1 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 5
22.04.2012, 22:41  [ТС] 3
Цитата Сообщение от maximkou Посмотреть сообщение
Код
   /^(.+)(^[@])@(.+)(^[\.])\.(.+)$/
вот простейшая регулярка
интересный ответ: просто и без лишних наворотов )
но не проскочит ли через эту регулярку адрес zzz@@zzz.zzz? (из-за опечатки пользователя)

зы ))) отзовись разгневанный моими словами пользоватеть, анонимно оставляющий пометки в моем профиле!! )))
0
368 / 43 / 8
Регистрация: 11.04.2012
Сообщений: 149
Записей в блоге: 1
22.04.2012, 23:18 4
проскочит, а вот так нет:

решение далеко не изящное, но простое для понимания новичку.
Код
/^(.+)(^[@])@(.+)(^[@\.])\.(.+)(^[@])$/
0
-1 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 5
22.04.2012, 23:33  [ТС] 5
Цитата Сообщение от maximkou Посмотреть сообщение
проскочит, а вот так нет:

решение далеко не изящное, но простое для понимания новичку.
Код
/^(.+)(^[@])@(.+)(^[@\.])\.(.+)(^[@])$/
maximkou, пересмотри свой код, помоему переборщил слегка )
зы ) один говнокодер анонимный оказался, интересно их >1 на этом форуме? ))
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
25.04.2012, 19:57 6
Цитата Сообщение от JSergRu Посмотреть сообщение
Пока еще не нашел ни одной регулярки в просторах интернета, которая пропустит M.a_И-л.-_1@M.a_И-л.-_1.
Вероятно, потому что имя домена не может содержать подчерков (_) и имя домена 1го уровня может начинаться только на букву.
RFC 2396 - см. раздел "A. Collected BNF for URI".

Цитата Сообщение от JSergRu Посмотреть сообщение
Есть ли на этом форуме достойные программисты
JSergRu, Если Вы такой самоуверенный, то разбирайтесь наздоровье: http://ex-parrot.com/~pdw/Mail-RFC822-Address.html
0
-1 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 5
25.04.2012, 21:45  [ТС] 7
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Вероятно, потому что имя домена не может содержать подчерков (_) и имя домена 1го уровня может начинаться только на букву.
RFC 2396 - см. раздел "A. Collected BNF for URI".


JSergRu, Если Вы такой самоуверенный, то разбирайтесь наздоровье: http://ex-parrot.com/~pdw/Mail-RFC822-Address.html
Кроме этой и другие ошибки допущены намеренно, нет, я не самоуверенный - сообщение составленно провокационно для того, чтобы откликнулось максимально возможное количество PHP-кодеров, каковых оказалось двое... нет - трое (и то один из них мышь не достойная уважения - тот что вякнул в репе и трусливо анонимничает, неудобная система репутации). В любом случае интерес к этой теме на этом форуме пропал ( PHPшников тут нет мало (
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
26.04.2012, 18:31 8
Цитата Сообщение от JSergRu Посмотреть сообщение
сообщение составленно провокационно для того, чтобы откликнулось максимально возможное количество PHP-кодеров
...
В любом случае интерес к этой теме на этом форуме пропал ( PHPшников тут нет мало (
"В интернете кто-то неправ"
JSergRu, А Вам не приходило в голову, что Вам просто не хотят отвечать на Ваши провокации? Поставили бы вопрос нормально, без гонора - картина была бы совершенно иной.
1
-1 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 5
27.04.2012, 02:59  [ТС] 9
Цитата Сообщение от Vovan-VE Посмотреть сообщение
"В интернете кто-то неправ"
JSergRu, А Вам не приходило в голову, что Вам просто не хотят отвечать на Ваши провокации? Поставили бы вопрос нормально, без гонора - картина была бы совершенно иной.
В любом случае, те кто обиделся(/разозлился и т.д.) на мое сообщение и прошел мимо - неуверенные в своем таланте кодеры (советы таких мне не нужны) либо ленивые "на помощь". Для таких повод игнорировать задачу формулировкой первого сообщения дал. Ни те ни другие меня не интересуют.
Из всех кто видел эту тему достойны уважения лишь maximkou, который не побоялся "быть забросанным помидорами", и Вы, Vovan-VE.
С Уважением, Я. )
зы за регулярку спасибо, вот в конвертере (RU>EN) разобраться не могу, бред в результате получается ( если колом встану - снова напишу...
0
21 / 21 / 2
Регистрация: 13.06.2011
Сообщений: 55
30.04.2012, 14:15 10
Javascript
1
/^[_a--я\d][_a--я\.\d-]*@[a--я\d][\.a--я\d-]*\.[a--я]{2,4}$/i
использую давно, проблем вроде не было
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
30.04.2012, 14:57 11
Цитата Сообщение от Mikanoshi Посмотреть сообщение
использую давно, проблем вроде не было
Пропустит неправильный домен с несколькими точками подряд (a@b..cd).
Не пропустит домен верхнего уровня с допустимой цифрой-не-в-начале (a@b.c2). В реальности, допустим, таких доменов нет, но по спецификации они не запрещены.
0
21 / 21 / 2
Регистрация: 13.06.2011
Сообщений: 55
30.04.2012, 15:58 12
PHP
1
/^[_a--я\d][_a--я\.\d-]*@[a--я\d]([\.a--я\d-][^\.]+?)*\.[a--я]{2,4}$/i


В имени мыла наверно тоже нельзя точки подряд) Туда такую же конструкцию можно засунуть.
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
30.04.2012, 16:30 13
Mikanoshi, a@b.$.ru - true
Что касается домена, то:
Код
domain            ::=  1*( domain-label "." ) top-domain-label
domain-label      ::=  alphanum [ *( "-" | alphanum ) alphanum ]
top-domain-label  ::=  alpha [ *( "-" | alphanum ) alphanum ]
В псевдо-регэкспах:
Код
domain-label-end  ::= [-a-zа-я\d]*[a-zа-я\d]
top-domain-label  ::= [a-zа-я](?: <top-domain-label> )?
domain-label      ::= [a-zа-я\d](?: <top-domain-label> )?
domain            ::= (?: <domain-label> \.)+ <top-domain-label>
PHP
1
2
3
4
5
6
7
$domain_label_end = '(?:[-a-zа-я\\d]*[a-zа-я\\d])?';
$domain =
    '(?:'
        . '[a-zа-я\\d]' . $domain_label_end
        . '\\.'
    . ')+'
    . '[a-zа-я]' . $domain_label_end;
А вот с логином дела обстоят долее страшно. По спецификации в логине, что перед @, может быть и строка в кавычках с заэкранированными символами. Хотя провайдеры и хостеры, конечно, таким извратом не занимаются, но набор их органичений на логин - это почти вольное дело. Поэтому с логином мы в любом случае можем как перестараться, так и недостараться.
0
21 / 21 / 2
Регистрация: 13.06.2011
Сообщений: 55
30.04.2012, 16:37 14
PHP
1
/^[_a--я\d][_a--я\.\d-]*@[a--я\d]([\.a--я\d-][a--я\d-]+?)*\.[a--я]{2,4}$/i
такое оставлю) а включающее все варианты это то, на которое ты раньше ссылку давал, но это как-то слишком.
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
30.04.2012, 17:10 15
Mikanoshi, На самом деле в PCRE всё можно упростить в разы с помощь рекурсивных подшаблонов (?n). Регэксп по той ссылке просто не рассчитан на такую экзотику, там всё в лоб последовательно.
0
30.04.2012, 17:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2012, 17:10
Помогаю со студенческими работами здесь

Запарился с регуляркой
Короче пишу сервис для определения плотности ключей в статье под НЧ. Надо чтобы регулярка находила...

Спарсить регуляркой
Помогите спарсить регуляркой слово sa-mp-442.png между тегом &lt;a&gt; &lt;/a&gt; &lt;a...

условие с регуляркой
Привет! У меня не получается поставить условие с регуляркой. Задача такая: есть поле -...

Не получается с регуляркой
Здравствуйте, я совсем запутался и ничего не понимаю уже %-) Почему находит совпадение и как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru