Как вытащить адрес электронной почты из этой строки? - PullRequest
1 голос
/ 23 января 2012

Вот два возможных сценария электронной почты:

email = "Joe Schmoe <joe@example.com>"
email = "joe@example.com"

Я всегда только хочу joe@example.com.

Так что бы это было за регулярное выражение или метод, который будетучитывать оба сценария?

Ответы [ 4 ]

3 голосов
/ 23 января 2012

Это проходит ваши примеры:

def find_email(string)
  string[/<([^>]*)>$/, 1] || string
end

find_email "Joe Schmoe <joe@example.com>" # => "joe@example.com"
find_email "joe@example.com"              # => "joe@example.com"
2 голосов
/ 23 января 2012

Если это только два формата, не используйте регулярные выражения. Просто используйте простой анализ строки. Если вы нашли пару «<>», извлеките адрес электронной почты между ними, а если вы не нашли эти символы, обработайте всю строку как адрес электронной почты.

Регулярные выражения хороши, когда они вам нужны, но если у вас есть очень простые шаблоны, тогда издержки на загрузку и анализ регулярного выражения и его обработку будут намного выше, чем простое манипулирование строками. Не загрузка в дополнительные библиотеки, отличные от основных в языке, почти всегда будет быстрее, чем идти другим путем.

2 голосов
/ 23 января 2012

Если вы знаете, что ваша электронная почта всегда будет в < >, тогда вы можете добавить подстроку с теми, которые являются начальным и конечным индексами.

0 голосов
/ 23 января 2012

Если вы хотите загрузить дополнительную библиотеку, это уже решено в геме TMail: http://lindsaar.net/2008/4/13/tip-5-cleaning-up-an-verifying-an-email-address-with-ruby-on-rails

TMail::Address.parse('Mikel A. <spam@lindsaar.net>').spec
=> "spam@lindsaar.net"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...