ruby on rails валидация регулярных выражений через запятую адреса электронной почты - PullRequest
0 голосов
/ 17 апреля 2011

Я новичок в регулярных выражениях, и мне нужно проанализировать разделенный запятыми ввод расширений адресов электронной почты (все после символа @). Пример:

foo.bar, foo.bar.baz, Foo-bar.baz

Я знаю, что в строке нет пробелов. Также. Ниже приведено регулярное выражение, которое я хочу использовать только для одного расширения электронной почты:

/[a-z\d\-.]+\.[a-z]+\z/i

Как изменить регулярное выражение в Ruby для работы с несколькими расширениями, разделенными запятыми?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 14 июля 2011
\A(([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})[, ]?)*\Z

Приведенное выше регулярное выражение работает для 0 или более адресов электронной почты, разделенных запятыми.Вы можете захотеть сжать (",") строку перед сохранением или использовать ее для удаления запятой.

0 голосов
/ 17 апреля 2011

Возможно, вам лучше разбить список на компоненты и затем проверить каждый компонент:

hosts  = 'foo.bar,foo.bar.baz,foo-bar.baz'
all_ok = true
hosts.split(/\s*,\s*/).each do |host|
    all_ok = false unless(host =~ /[a-z\d\-.]+\.[a-z]+\z/i)
end

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

0 голосов
/ 17 апреля 2011

попытка

/(,{0,1}[a-zA-Z_]+[^.]*\.[a-zA-Z]{2,6})+/i

на основе моего теста:

p 'True' if 'foo.bar,foo.bar.baz,foo-bar.baz' =~ /(,{0,1}[a-zA-Z_]+[^.]*\.[a-zA-Z]{2,6})/i

даст

True

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...