Автор Тема: Проверка e-mail  (Прочитано 5643 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Ardzhan

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 205
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ardzhan.km.ru
Проверка e-mail
« : 26 Июля 2002, 14:11:04 »
Такой код

print "Content-type: text/html\\n\\n";

$email="test\\@mail.ru";
if ( $email =~ m/(\\w+)\\@(\\w+\\.\\w+)/ ) {
     print "OK";
}else{
     print "Not Valid";
}
Не пашет он, зараза! Точнее если вставить некорректный символ в слово mail -выдает not valid (так и надо), а вот если в test или ru :mad:
Так тоже пробовал: $email =~ m/(\\w+)\\@(\\w+)\\.(w+)/ - та же лажа.
Помогите с регуляркой... :insane:
P.S. Должны допускаться адреса типа test@win.mail.ru, test@win.from.mail.ru итд...

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Проверка e-mail
« Ответ #1 : 26 Июля 2002, 14:19:06 »
Поищи на этом же сайте в разделе перл-скриптов проверку валидности имэил - там все по косточкам разобрано.

Оффлайн Ardzhan

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 205
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ardzhan.km.ru
Проверка e-mail
« Ответ #2 : 26 Июля 2002, 14:43:54 »
Не нашел :( Может плохо искал, а может уже удалили :-(

Оффлайн Ardzhan

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 205
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ardzhan.km.ru
Проверка e-mail
« Ответ #3 : 26 Июля 2002, 15:02:17 »
Сделал сам! если кому нужно:
$email =~m/^([\\w,\\-,\\.]+\\@[\\w,\\-,\\.]+\\.\\w{2,4})/

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Проверка e-mail
« Ответ #4 : 26 Июля 2002, 15:25:14 »
На Perl не програмил, но вот Perl\'овская регулярка.
if (!preg_match("/^[a-z0-9_-]{1,20}@(([a-z0-9-]+\\.)+(com|net|org|mil|".
"edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\\.[0-9]{1,3}\\.[0-".
"9]{1,3}\\.[0-9]{1,3})$/is",$mail))
return -1;
return $mail;

думаю разберёшься.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Проверка e-mail
« Ответ #5 : 26 Июля 2002, 15:50:47 »
Ловите!!!
#!/usr/bin/perl
use Net::DNS;
use IO::Socket;
use CGI::Carp qw(fatalsToBrowser);

my $email = \'my@mail.ru\';
my $emailfrom = \'email@address.com\';

print "Content-type: text/html; charset=windows-1251\\n\\n";

############################################################
############################################################
############################################################

if ($email !~ /^[a-zA-Z_\\.-][a-zA-Z0-9_\\.-\\d]*\\@[a-zA-Z\\.-\\d]+\\.[a-zA-Z]{2,4}$/) {
print "e-mail неправильного формата!
\\n";
exit;
}

############################################################
############################################################
############################################################

my $dns = "212.164.166.11";        # DNS Сервер

my $res = new Net::DNS::Resolver;
$res->nameservers($dns);

$email =~ /.*\\@(.*)$/;
my $domain = $1;

my @mx = mx($res, $domain);
if (!@mx) {
print "Сервер для домена $domain не обнаружен!
\\n";
exit;
}

my $rr = shift(@mx);
my $mxserver = $rr->exchange;

############################################################
############################################################
############################################################

my $handle = IO::Socket::INET->new(
Proto  => "tcp",
PeerAddr  => $mxserver,
PeerPort  => 25);

if ($handle) {
$handle->autoflush(1);
print $handle "HELO $mxserver\\n";
print $handle "MAIL FROM: $emailfrom\\n";
my $stype = 0;
my $regged = 0;
my $isvalid = 1;
$email =~ /^([a-z$ch2]+)\\@([a-z$ch]+\\.[a-z]{2,4})$/;
my ($em,$eh) = ($1,$2);
if ($stype) {
print $handle "RCPT TO: $email\\n";
}
else {
print $handle "VRFY $em\\n";
}
cycle:
my $rd = <$handle>;
chomp($rd);
# Hello From Server
if ($rd =~ /^220/) {goto cycle;}

# HELO Reply
elsif ($rd =~ /^250 \\S+ hello/i) {goto cycle;}

# MAIL FROM Reply
elsif ($rd =~ /^250/i && !$regged) {$regged = 1;goto cycle;}

# Unknown command \'VRFY *\'
# VRFY not available
elsif (($rd =~ /^252/ || $rd =~ /^550 5\\.5\\.2/ || $rd =~ /^502/) && !$stype) {
$stype = 1;print $handle "RCPT TO: $email\\n"; goto cycle;
}

# 250  verified
# 250 , Recipient ok
# 250 ok
# 250 2.1.5 *
# В принципе, можно, да и правильне будет просто 250 *, но при таком
# корявом написании скрипта так будет надежней
elsif ($rd =~ /^250 <\\S+> verified/i || $rd =~ /^250 <\\S+>,? recipient ok/i ||
$rd =~ /^250 ok/i || $rd =~ /^250 2\\.1\\.5/i) {
print "$email верный.
\\n";
}

# 550 5.7.1  user unknown
elsif ($rd =~ /^550/) {print "$email неверный.
\\n";$isvalid = 0;}

if ($isvalid) {
# Отправляем почту... (как это сделать читай ниже)
}
close $handle;
if (!$isvalid) {exit;}
}
else {
print "Не удалось подулкчиться к серверу!
\\n";
exit;
}
# Теперь делаем что угодно...

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Проверка e-mail
« Ответ #6 : 26 Июля 2002, 15:52:27 »
В догонку:
тут :D - : D

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Проверка e-mail
« Ответ #7 : 26 Июля 2002, 22:27:05 »
Цитировать
$email !~ /^[a-zA-Z_\\.-][a-zA-Z0-9_\\.-\\d]*\\@[a-zA-Z\\.-\\d]+\\.[a-zA-Z]{2,4}$/

Я тоже эту проверку использую...
Вот только у меня проблемка, с включённым флагам -w, Перл, хоть и работает, но огрызается:
False [] range "\\.-\\d" before HERE mark in regex m/^[a-zA-Z_\\.-][a-zA-Z0-9_\\.-\\
 << HERE ]*\\@[a-zA-Z\\.-\\d]+\\.[a-zA-Z]{2,4}$/ at c:\\intellectuals\\cgi-bin\\articu
.cgi line 75.
False [] range "\\.-\\d" before HERE mark in regex m/^[a-zA-Z_\\.-][a-zA-Z0-9_\\.-\\
]*\\@[a-zA-Z\\.-\\d << HERE ]+\\.[a-zA-Z]{2,4}$/ at
Примерно, так... Извините, тут урезано не много, но как есть. Никто не знает почему, и как бороться?
Ну к чему все это, лучше бы водки выпили...

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Проверка e-mail
« Ответ #8 : 26 Июля 2002, 22:29:13 »
Ardzhan, поищи на вебскрипте, среди статей. В ней как раз я и увидел впервые это регулярное выражение.
Ну к чему все это, лучше бы водки выпили...

Оффлайн Ardzhan

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 205
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ardzhan.km.ru
Проверка e-mail
« Ответ #9 : 27 Июля 2002, 16:06:18 »
Цитировать
$email !~ /^[a-zA-Z_\\.-][a-zA-Z0-9_\\.-\\d]*\\@[a-zA-Z\\.-\\d]+\\.[a-zA-Z]{2,4}$/

А зачем так? Если можно... Тут все пашет...
$email =~m/^([\\w,\\-,\\.]+\\@[\\w,\\-,\\.]+\\.\\w{2,4})/
\\w - разрешает все символы англ. алфавита и подчеркивание...

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Проверка e-mail
« Ответ #10 : 28 Июля 2002, 22:23:46 »
ээээ Тема поднимается ну ни первый раз.... Результат обсуждения хотите? :)))
Проверить существование e-mail адреса можно только одним путем - послать по нему e-mail и получить ответ.:))
2B OR NOT 2B = FF

Оффлайн КшЫуфксрук

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 99
  • +0/-0
  • 0
    • Просмотр профиля
    • http://risearch.org/
Проверка e-mail
« Ответ #11 : 29 Июля 2002, 12:07:31 »
А может не стоит изобретать велосипед? Регулярное выражения для проверки правильности синтаксиса e-mail адресов, которое _почти_ соответствует спецификации RFC 822, общеизвестно:

http://www.piter.com/bugs/5-318-00056-8/optimis.txt

Оффлайн Ardzhan

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 205
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ardzhan.km.ru
Проверка e-mail
« Ответ #12 : 29 Июля 2002, 22:31:01 »
Chs
Это-то ясно, имелось ввиду корректность...
Цитировать
получить ответ

Это тоже не выход... Ответа можно и не получить :)

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Проверка e-mail
« Ответ #13 : 29 Июля 2002, 22:57:34 »
Цитировать
Ответа можно и не получить

А разве те письма, которые не нашли адресата, не возвращаются отправителю?
ИМХО: Chs имел в виду получить ответ от регистрирующегося юзера.
Наример мы посылаем письмо с сылкой вида
ввв.сайт.ру/скрипт.цги?ид=1234566
Случайно генерируемое число,  которое "запоминается" скриптом (записывается в файл). Если юзверь пришёл по ссылке то значит всё ок, если нет то делаем выводы...
Ну к чему все это, лучше бы водки выпили...

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28