Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Регулярные выражения > регулярное выражение для проверки e-mail |
Автор: Agares 15.7.2008, 18:25 | ||||
Помогите составить регулярное выражение для мыла. делал так:
результат вот такой получается:
Какое нужно исспользовать рег. выражение? |
Автор: tolkien 15.7.2008, 18:36 |
^([\w\-.]+)\@(\w+)\.(\w+) |
Автор: Agares 15.7.2008, 18:37 |
Прише к такому решению: /^[A-Za-z\.]+\@(\w)+\.[A-Za-z\.]+$/ но если ввести мыло [email protected] то говорит что корректный. Как сделать, что бы только одну точку перед собакой ставить можно? |
Автор: KSURi 15.7.2008, 18:42 | ||
Не идеально, но мне подходит)
Добавлено через 3 минуты и 5 секунд Agares, а почему одну точку? А если домен второго уровня? |
Автор: Agares 15.7.2008, 18:48 |
О! То что надо спасибо большое! |
Автор: gcc 15.7.2008, 18:50 | ||
|
Автор: arto 15.7.2008, 19:00 |
это просто праздник какой-то! ни одного правильного ответа! ![]() |
Автор: KSURi 15.7.2008, 19:00 |
gcc, странная какая-то регулярка у вас, я бы не стал такую использовать) Более того, у вас все слеши зачем-то эскейпятся, это влияет на работоспособность всего регулярного выражения. Также символ @ не надо эскейпить, т.к. у него нет никакой мета-ф-ии. |
Автор: Agares 15.7.2008, 19:02 |
Блин, все ок, но только Введенный Вами адрес ([email protected]) корректный! нужно это исправить. поможете? |
Автор: KSURi 15.7.2008, 19:08 | ||
![]() |
Автор: Agares 15.7.2008, 19:10 |
Дело в том, что задача - написать регулярное выражение |
Автор: tolkien 15.7.2008, 19:40 |
просто узнайте спецификацию постройки e-mail и сделайте так как там сказано. |
Автор: Itsys 15.7.2008, 19:57 | ||
Вот самая точная:
|
Автор: gcc 15.7.2008, 20:11 |
еще можно попробовать подключиться к данному email, если он есть - значит адресс правильный! ![]() |
Автор: Agares 15.7.2008, 21:00 | ||
![]() Вот эта подходит больше всего:
но нужно ее подкарректировать, что бы [email protected] воспринималось как не правильное мыло. Мне подсказали, что нужно использовать группировку. но как я не понял. Эксперементы прошли не удачно |
Автор: arto 15.7.2008, 21:52 |
бедные музейщики, им не послать почту. [email protected] тоже неправильный адрес? jfyi: [email protected] -- вполне себе валидный синтаксис. |
Автор: AlexPet 16.7.2008, 07:41 | ||||||
Вообще-то массивы интерполируются в регулярном выражении ![]()
|
Автор: Agares 16.7.2008, 07:57 |
Хм.. не знал. спасибо. А кто может помочь решить проблему? |
Автор: tolkien 16.7.2008, 09:31 |
Большая и толстая книга вам в помощь. Раздел про рег выражения. За основу возмите одно из рег выражениях написанных выше и улучшайте его. |
Автор: Agares 16.7.2008, 09:41 |
Я понимаю, но может у кого есть готовое решение? Просто мне максимально быстро нужно это сделать.. |
Автор: Agares 16.7.2008, 10:40 | ||
Сделал вот так:
|
Автор: IceSunrise 16.7.2008, 11:14 | ||||
AlexPet,
Если после @ идет корректное имя переменной, то да, в противном случае можно не экранировать.
|
Автор: AlexPet 16.7.2008, 11:18 |
IceSunrise, да, именно так. Но ИМХО лучше не испытывать судьбу и написать лишний обратный слеш (мало ли, через пару недель об этом забудешь ![]() Да и warning лишний не нужен (по крайней мере в ActivePerl) |
Автор: arto 16.7.2008, 11:21 |
в \w входит '_', в доменной части запрещено (фокусы с * опустим). Добавлено через 14 минут и 42 секунды btw, для первоначальной проверки можно использовать: # perl -le 'my $re = shift; print "RE: /$re/"; print $a,"\t",($a =~ m#$re# ? "YES":"NO") eq $b ? "PASSED":"FAIL" while (($a,$b) = splice@ARGV,0,2);' \ '^([\w\d\-]+\.{0,1})+@[\w\d\-]+(\.{1}[\w\d\-]+)+$' \ [email protected] YES a+test@com YES [email protected] YES a@b_c.com NO [email protected] YES aa%[email protected] YES "aa.bb.cc.dd@[192.168.1.1]" YES [email protected] NO %[email protected] NO [email protected] NO RE: /^([\w\d\-]+\.{0,1})+@[\w\d\-]+(\.{1}[\w\d\-]+)+$/ [email protected] PASSED a+test@com FAIL [email protected] PASSED a@b_c.com FAIL [email protected] PASSED aa%[email protected] FAIL aa.bb.cc.dd@[192.168.1.1] FAIL [email protected] PASSED %[email protected] PASSED [email protected] PASSED все должно быть PASSED. дополнения приветствуются :) |
Автор: gcc 1.10.2008, 00:01 |
Data::Validate::Email http://search.cpan.org/search?m=all&q=Data%3A%3AValidate%3A&s=1 этоти модули наверное подойдут для этого дела? там где важное чтобы не прошел мусор? чтобы не было rm -rf / ![]() |
Автор: VutDen 22.1.2014, 14:54 | ||
Вот держи, сам пользуюсь, поределение 99%
а то что то простенькие у тебя выражения:) |
Автор: arto 22.1.2014, 15:52 |
ошибка сходу -- пропустит домены вида a-------b.c---------d |