|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Valentin Nechayev 2:5020/400 22 Dec 2002 13:05:11 To : Artem Chuprina Subject : Re: regexp email_check -------------------------------------------------------------------------------- >>> Artem Chuprina wrote: AC> Та ты гонишь. Вот те самые вышеуказанные адреса AC> sentto-8585816-249-1040417837-ran=home.ran.pp.ru@returns.groups.yahoo.com AC> eriol.ran.pp.ru!eriol@eriol.ran.pp.ru Действительно гоню. Hо не во всём. Ты приводишь контрпримеры из несколько другой постановки задачи. Проверка адреса, задаваемого пользователем, проверка адреса вообще, проверка адреса в конверте - разные задачи даже в случае полной реализации стандарта. Я исходил из задачи проверки адреса, вводимого пользователем как контактный, и вопрос "покажи мне хоть один пример" ставил именно из этого уточнения. Sorry, его следовало сформулировать прежде чем давать ответ. Пример с апострофом от Ruslan Bondarev - хороший контрпример. Твои примеры - не настолько. Адрес с '!' - специфическая форма обратного адреса, видимого только почтовой системе (к тому же неправильно сформированного - я правильно понимаю, что там UUPC/Extended? Или это извращённо настроенный юникс?); где-то есть ещё UUCP сети с адресами вида uunet!isc!paul. '=' - было бы тоже нереальным, но бывают запросы типа 'прислать reply на subscribe-349857439857349574938-vasya=pupkin.com', так что тут случай сложнее. Hо таких контактных адресов - я не видел. Если же собрать условия воедино: 1. Проверка не должна допускать адреса со спорными символами (пробелы, кавычки, прочие шелловые метасимволы, NUL, символы верхней половины ascii), 2. Проверка не должна допускать адреса, которые могут быть поняты не как адреса или не как один адрес (пробел, табуляция внутри, '-' вначале), 3. Проверка должна контролировать корректность доменной части, то с добавкой '+', '=', '%', '!' и ещё ряда символов - получится достаточно близкое к тому, что я выдал вначале. Я сейчас глянул таблицу: следует допустить только "!#%+-./:=^_~", и то - не первым символом. Я пропустил '+', '=' как законные и не вызывающие никаких проблем, '%' и '!' как такие же, которые, правда, не относятся к specials, но употребляются в этом смысле; и ещё можно наскрести до десятка символов, не вызывающих проблемы при типичных каналах передачи. Hо, обрати внимание, о чём я говорил на принципиальном уровне. Если у тебя весь софт гарантированно написан корректно, и всё всегда правильно разбирает, передаёт, заворачивает, то у тебя не будет проблем с любыми последовательностями символов, независимо от того, являются они правильными адресами или нет ;)) В своём коде при передаче в шелл я аккуратно эскейплю все подозрительные символы. В то же время, сокращённая проверка имеет два преимущества - 1) пишется и работает крайне быстро 2) спасает от проблем на кривой передаче через шелл, через каналы чтения/записи (которые могут, например, перевод строки понять как конец адреса), и через любые другие каналы, где не соблюдены условия передачи. А что таких каналов и кривых средств - большинство - в этом можно убедиться не ставя многолетних тестов ;)) И ей соответствует настолько подавляющее количество адресов, что... хм... для альфа-бета версий этого, как правило, достаточно - есть возможность сосредоточиться на более других вопросах. Если у тебя есть гарантия правильности передачи по всей цепочке - ok. Если можешь сделать полный правильный разбор адреса - тоже ok. Кто возражать будет? ;)) Hо пока этого нет - лучше подстраховаться. Чай я таки съем;)) но не по неправильности идеи, а потому, что не должен был пропустить случаи '+', '=' и ряда прочих, это совершенно недопустимая невнимательность. А вот апостроф, в ещё одном примере - это опасное средство и пока нет гарантии его правильной передачи - лучше не пускать. С адекватной диагностикой, естественно. Заранее извинения Руслану Бондареву, его адресату не повезло, по крайней мере пока не будет проверены все каналы передачи адресов. -netch- --- ifmail v.2.15dev5 * Origin: Dark side of coredump (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/736856024ffb.html, оценка из 5, голосов 10
|