2013-06-09 3 views
0

Я использую следующее регулярное выражение для проверки электронной почты в электронной почте БД в Rails приложения:Ruby: Удалить «двойную точку» с регулярным выражением

/\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 

это своего рода работает, но он оставляет меня с некорректными почты Wich имеет такую ​​ошибку:

[email protected] 

Как я могу rwrite это регулярное выражения, чтобы избежать этого или который является самым лучшим регулярным выражением, чтобы очистить список адресов электронной почты, я должен оставить только действительные адреса электронной почты? Я использую метод, как этот, чтобы очистить список:

def mailSweep 
    mails = Email.all.lazy 
    for address in mails do 
    if address.email.to_s =~ /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
     puts address.email.to_s + " " + "it's valid" 
    else 
     puts address.email.to_s + " " + "it's invalid, destroying..." 
     address.destroy 
    end 
    end 
end 
+3

См. Http://stackoverflow.com/questions/703060/valid-email-address-regular-expression для печальной реальности регулярных адресов электронной почты с регулярным выражением. Затем найдите драгоценный камень, чтобы сделать это за вас. Вот один из них: https://github.com/dim/rfc-822. –

+0

@Jim Stewart, +1 за то, что он показывает, почему он испорчен и отличное альтернативное решение. –

ответ

1

Я предлагаю

/\A[^@\s][email protected]([-a-zA-Z0-9]{1,63}\.)+[a-zA-Z0-9]{2,63}\z/ 

Обратите внимание, что это регулярное выражение не разрешает все адреса электронной почты юридических. Вам нужно что-то insanely complicated, чтобы разрешить всем RFC 822 действительные адреса электронной почты, которые были лишены комментариев. Если вы хотите включить комментарии, то это не зависит от регулярных выражений, и вам нужно перейти к lexical parser.

Даже тогда вы не можете быть уверены, что письмо действительно действительно. Лучшей проверкой является попытка отправить ее и посмотреть, принимает ли принимающая система ее. Конечно, даже тогда его можно было бы отбросить ...

+0

Единственный тест, который действительно работает, - это отправить электронное письмо и посмотреть, есть ли у вас ответ от пользователя. –

Смежные вопросы