Pull to refresh

Comments 9

Почитайте RFC 3696 и ужаснитесь следующим валидным е-мейлам:


  • "Abc\@def"@example.com
  • "Fred Bloggs"@example.com
  • "Joe\Blow"@example.com
  • "Abc@def"@example.com
  • customer/department=shipping@example.com
  • \$A12345@example.com
  • !def!xyz%abc@example.com
  • _somename@example.com
  • " "@example.com
  • Miles.O'Brian@example.com
  • !#$%&'*+-/=?^_`{}|~@example.com

Алсо, не смог потестить Ваш монструозный регексп на regex101, не подскажете где тестировали?

Спасибо за отзыв!

Тестировал в сервисе http://www.regexpal.com/

P.S.
Немного поменял выражение, там были подводные камни при перечисление этих символов! # $ % & ' * + — / =? ^ _ `. { | } ~

Перед знаком минус должен стоять backslash.

Вот исправленное
([\w~}|{.`^?\-=+/*'&%$#!]){1,64}\@([\w~}|{.`^?\-=+/*'&%$#!]){1,64}\.([a-z0-9]){2,64}

+ Выражение могло не запуститься в онлайн редакторе, потому что в нем точка была экранирована два раза \\.
(первый раз для РВ, второй для NSString)

image

Нет кавычек, а они в качестве адреса валидны. Для полноценной работы нужна поддержка русских доменов.рф,.дети, etc. Ещё домен может ВНЕЗАПНО быть в punycode — mail@xn--d1acufc.xn--p1ai (что вашим регекспом не покрывается).


Алсо, ещё несколько валидных адресов:


  • jsmith@[192.168.2.1]
  • "very.(),:;<>[]\".VERY.\"very@\ \"very\".unusual"@strange.example.com
  • user@[IPv6:2001:DB8::1]
  • user@tt
  • user@localhost
  • "()<>[]:,;@\\"!#$%&'-/=?^_`{}| ~.a"@example.org

И парочка неправильных, которые Ваш регексп кушает на отлично:


  • john..doe@example.com
  • john.doe@example..com
Как тьюториал все понятно и интересно описано, но вот тему для валидации не ту выбрали.
Только что мы составили полноценное регулярное выражение.

Какое-то… маленькое оно. А где проверка на кавычки?
"foo"@bar.com

И, да, в кавычках можно использовать еще специальные символы.
abc"@"def@foobar.com

И их может быть несколько (кавычек)

PS Ну и вообще RFC822 следовать надо )
Спасибо за отзыв, исправил РВ

([\w~}|{.`^?\-=+/*'&%$#!]){1,64}\@([\w~}|{.`^?\-=+/*'&%$#!]){1,64}\.([a-z0-9]){2,64}

Теперь кавычки не проходят

image
Так они должны проходить!
Делал проверку исходя из этих условий, к сожалению кавычки там не упоминаются, поэтому не брал их в расчет.

image
А как же русские буквы, ведь существуют домены.рф,.бел и другие
Хорошие замечание! Честно говоря, только сейчас от вас узнал, что есть такие.
Sign up to leave a comment.

Articles