С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: RegExp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
JSergRu
-1 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 5
1

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

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

Пока еще не нашел ни одной регулярки в просторах интернета, которая пропустит 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2012, 20:26
Ответы с готовыми решениями:

С регуляркой непонятки
есть к к примеру страница в которой есть такие ссылки <a...

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

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

If/else условие с регуляркой
$r = "jedcjecve@jcry.ru"; $rg = "#+?@+{2,}#"; preg_match($rg, $r, $out);...

Составить регуляркой массив
Всем привет! Есть массив. В нём данные вида: "ПАР1","grade":0," Какой...

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

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

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

решение далеко не изящное, но простое для понимания новичку.
Код
/^(.+)(^[@])@(.+)(^[@\.])\.(.+)(^[@])$/
maximkou, пересмотри свой код, помоему переборщил слегка )
зы ) один говнокодер анонимный оказался, интересно их >1 на этом форуме? ))
0
Vovan-VE
13161 / 6546 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
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
JSergRu
-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
Vovan-VE
13161 / 6546 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
26.04.2012, 18:31 8
Цитата Сообщение от JSergRu Посмотреть сообщение
сообщение составленно провокационно для того, чтобы откликнулось максимально возможное количество PHP-кодеров
...
В любом случае интерес к этой теме на этом форуме пропал ( PHPшников тут нет мало (
"В интернете кто-то неправ"
JSergRu, А Вам не приходило в голову, что Вам просто не хотят отвечать на Ваши провокации? Поставили бы вопрос нормально, без гонора - картина была бы совершенно иной.
1
JSergRu
-1 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 5
27.04.2012, 02:59  [ТС] 9
Цитата Сообщение от Vovan-VE Посмотреть сообщение
"В интернете кто-то неправ"
JSergRu, А Вам не приходило в голову, что Вам просто не хотят отвечать на Ваши провокации? Поставили бы вопрос нормально, без гонора - картина была бы совершенно иной.
В любом случае, те кто обиделся(/разозлился и т.д.) на мое сообщение и прошел мимо - неуверенные в своем таланте кодеры (советы таких мне не нужны) либо ленивые "на помощь". Для таких повод игнорировать задачу формулировкой первого сообщения дал. Ни те ни другие меня не интересуют.
Из всех кто видел эту тему достойны уважения лишь maximkou, который не побоялся "быть забросанным помидорами", и Вы, Vovan-VE.
С Уважением, Я. )
зы за регулярку спасибо, вот в конвертере (RU>EN) разобраться не могу, бред в результате получается ( если колом встану - снова напишу...
0
Mikanoshi
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
Vovan-VE
13161 / 6546 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
30.04.2012, 14:57 11
Цитата Сообщение от Mikanoshi Посмотреть сообщение
использую давно, проблем вроде не было
Пропустит неправильный домен с несколькими точками подряд (a@b..cd).
Не пропустит домен верхнего уровня с допустимой цифрой-не-в-начале (a@b.c2). В реальности, допустим, таких доменов нет, но по спецификации они не запрещены.
0
Mikanoshi
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
Vovan-VE
13161 / 6546 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
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
Mikanoshi
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
Vovan-VE
13161 / 6546 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
30.04.2012, 17:10 15
Mikanoshi, На самом деле в PCRE всё можно упростить в разы с помощь рекурсивных подшаблонов (?n). Регэксп по той ссылке просто не рассчитан на такую экзотику, там всё в лоб последовательно.
0
30.04.2012, 17:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2012, 17:10

Парсинг конфига регуляркой
Добрый день. Прошу небольшой помощи, для владеющих регулярными выражениями....

Нужна помощь с регуляркой
Не могу составить регулярку. Есть строка вида /dir1/dir2/pic.jpg . Мне нужно...

Выручите плз с регуляркой )
В связи с переходом на 5.4... перестало работать......


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru