Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Оцените проверку эл. почты
 
 автор: ZeeG   (14.08.2007 в 11:14)   письмо автору
 
 

Вот написал функцию на проверку эл. почты
Не слишком ли строго по отношению к запрету на первый символ.

<?php
function email($mail)
 {
  
$sym ="\!\@\#\$\%\^\&\*\(\)\_\-\+\=\s\,\.\<\>\?\/\{\}\[\]\;\'"// можно пополнить список
  
$pattern "/^[^".$sym."](\w+([\-\.]?))*\w+([^".$sym."])@[^".$sym."]((\w+([\-\.]?))*\w+)+\.[a-z\-\.]+[^".$sym."]$/i";
  if(!
preg_match($pattern,$mail)){
  return 
false;
  }
  return 
true;
 }
?>

Укажите на ошибки, если возможно
Спасибо

   
 
 автор: Trianon   (14.08.2007 в 12:32)   письмо автору
 
   для: ZeeG   (14.08.2007 в 11:14)
 

А теперь - по-русски.

Со стандартом на именование доменных имен и почтовых ящиков у этого шаблона нет ничего общего.

   
 
 автор: ZeeG   (14.08.2007 в 12:35)   письмо автору
 
   для: Trianon   (14.08.2007 в 12:32)
 

Что Вы имеете в виду под стандартами?

   
 
 автор: Trianon   (14.08.2007 в 12:37)   письмо автору
 
   для: ZeeG   (14.08.2007 в 12:35)
 

Под стандартами я имею в виду RFC-документы.

   
 
 автор: ZeeG   (14.08.2007 в 13:04)   письмо автору
 
   для: Trianon   (14.08.2007 в 12:37)
 

Спасибо за ссылку. Почитал. Но увы не увидел где написано, что имена могут начинаться с
1) !@#$%^&*()_-+={}][\|:;',./? и тд
2) Что непосредственно перед и после @, в адресе эл. почты могут быть те же знаки
3) Что адрес эл. почты может с них начинаться и ими же заканчиваться
Если Вам не трудно приведите реальный пример адреса (не локальный)
Спасибо

   
 
 автор: Trianon   (14.08.2007 в 13:19)   письмо автору
 
   для: ZeeG   (14.08.2007 в 13:04)
 

1. Тогда может быть Вы покажете место, в котором написано, что имена не могут начинаться с этих символов? Или заканчиваться на них?

   
 
 автор: ZeeG   (14.08.2007 в 13:20)   письмо автору
 
   для: Trianon   (14.08.2007 в 13:19)
 

[^".$sym."]
Думаю, что можно и по-другому это написать, но пока не знаю как.
PS или Вы про ссылку, что дали?

   
 
 автор: Trianon   (14.08.2007 в 13:25)   письмо автору
 
   для: ZeeG   (14.08.2007 в 13:20)
 

В стандарте - я имел в виду.

Я вот, например, знаю такой домен i.am .
На каком основании Вы отказываете в валидности адресов этого домена?

   
 
 автор: ZeeG   (14.08.2007 в 13:28)   письмо автору
 
   для: Trianon   (14.08.2007 в 13:25)
 

Я Вас правильно понял i.am или i.am.. С точкой не прошло!

   
 
 автор: kasmanaft   (15.08.2007 в 16:32)   письмо автору
 
   для: ZeeG   (14.08.2007 в 13:28)
 

Идите на nic.ru и попробуйте зарегать домен "%:?%.ru"

   
 
 автор: SHAman   (15.08.2007 в 16:39)   письмо автору
 
   для: kasmanaft   (15.08.2007 в 16:32)
 

Блин, во вы заморачиваетесь!
Все проще. Как-то так:


/^[a-z0-9-.]+@[a-z0-9-.]+\.\w{2,4}$/i

   
 
 автор: ZeeG   (15.08.2007 в 19:00)   письмо автору
 
   для: SHAman   (15.08.2007 в 16:39)
 

А ведь можно вообще не париться.
Мне просто было интересно можно ли его (скрипт) считать надежным.

   
 
 автор: Trianon   (15.08.2007 в 22:14)   письмо автору
 
   для: SHAman   (15.08.2007 в 16:39)
 

домены первого уровня mobile и travel , конечно, Ваших скриптов недостойны.....

   
 
 автор: ZeeG   (15.08.2007 в 22:33)   письмо автору
 
   для: Trianon   (15.08.2007 в 22:14)
 

info@test.travel и info@test.travel проходят.

   
 
 автор: ZeeG   (15.08.2007 в 23:04)   письмо автору
 
   для: Trianon   (15.08.2007 в 22:14)
 

Вы вероятно использовали на то патерн. Я кидал исправленную версию.

$sym ="\!\@\#\$\%\^\&\*\(\)\+\=\s\,\.\<\>\?\/\{\}\[\]\;\'";
$pattern = "/^[^".$sym."]*(\w+([\-\.]?))*[\w+]?([^".$sym."])@[^".$sym."\-\_]*((\w+(\-\.?))*\w+)+\.[\w\-\.]+[^".$sym."]$/i";

   
 
 автор: Unkind   (15.08.2007 в 23:06)   письмо автору
 
   для: ZeeG   (15.08.2007 в 23:04)
 

Trianon обращался к SHAman.

   
 
 автор: SHAman   (16.08.2007 в 11:42)   письмо автору
 
   для: Trianon   (15.08.2007 в 22:14)
 

Да, недостойны:) Ну, я просто не знал, что они есть:) Чтобы стать достойными, им нужно всего-лишь исправить одну циферку в моем выражении : )

   
 
 автор: Саня   (16.08.2007 в 03:47)   письмо автору
 
   для: ZeeG   (14.08.2007 в 11:14)
 

http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=21874

   
 
 автор: ZeeG   (16.08.2007 в 07:15)   письмо автору
 
   для: Саня   (16.08.2007 в 03:47)
 

Почти как Новый Год.
Но мне все же интересно каким адресам, по-Вашему, моя функ-я откажет в валидности. Привожу ее еще раз:

<?php
function email($mail)
 {
  
$sym ="\!\@\#\$\%\^\&\*\(\)\+\=\s\,\.\<\>\?\/\{\}\[\]\;\'";
  
$pattern "/^[^".$sym."]*(\w+([\-\.]?))*[\w+]?([^".$sym."])@[^".$sym."\-\_]*((\w+(\-\.?))*\w+)+\.[\w\-\.]+[^".$sym."]$/i";
  if(!
preg_match($pattern,$mail)){
  return 
false;
  }
  return 
true;
 }
?>

Спасибо

   
 
 автор: kasmanaft   (16.08.2007 в 17:28)   письмо автору
 
   для: ZeeG   (16.08.2007 в 07:15)
 

Эм.. /.*/ - в валидности тоже никому не откажет :)
Ваша функция пропустит, например, "bla`~bl+a@мыло.r-u"
Не говоря уже о "Название домена должно состоять более чем из одного символа, начинаться и заканчиваться буквой латинского алфавита или цифрой"

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования