RoR EMail Validations- несколько регулярных выражений / форматов

Я пытаюсь использовать validates_format_of в моем файле модели для проверки адреса электронной почты. Однако мне нужно ввести два регулярных выражения для двух особых случаев. По сути, допускается только несколько доменных имен верхнего уровня.

Тем не менее, в соответствии с исходным кодом для проверок кажется, что он допускает только одно: ключ формата и один набор параметров в качестве значения хеш-функции. Есть ли способ использовать несколько регулярных выражений. Я пробовал логические операторы, но, кажется, принимает только первый. Кроме того, использование двух методов validates в одном поле приводит к тому, что ничего не будет принято, поскольку одно нарушает другое условие.

Чтобы объяснить в реальных условиях, скажем, я хочу только электронные письма, которые являются или Gmail или Yahoo и ничего больше. Как я могу использовать регулярные выражения для представления обоих и ничего больше? Это мой код Gmail, и он работает:

validates_format_of: эл.

Как я могу изменить его, чтобы включить другое доменное имя верхнего уровня?

2 ответа

Решение
validates_format_of :email, 
    :with => (/^([^@\s]+)@((gmail|yahoo|hotmail)\.+[a-z]{2,})$/i)

что-то вроде этого?

[az] в конце не будет захватывать что-то вроде '.com.au' или подобного, это нормально?

Также,

. is for single character, you want \. for an actual period
otherwise 'gmailxcom' would be valid

Чтобы опираться на ответ @Neet324, вы можете использовать:

validates_format_of :email, :with => (/^([^@\s]+)@((\.?\w+)+)$/i)

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

Другие вопросы по тегам