Ruby on rails RoR电子邮件验证--多个正则表达式/格式

Ruby on rails RoR电子邮件验证--多个正则表达式/格式,ruby-on-rails,email,validates-uniqueness-of,Ruby On Rails,Email,Validates Uniqueness Of,我正在尝试使用模型文件中的validates\u format\u验证电子邮件地址。但是,对于两种特殊情况,我需要输入两个正则表达式。基本上,只允许少数顶级域名 然而,根据验证的源代码,它似乎只允许一个:格式键和一组选项作为散列值。有没有一种方法可以使用多个正则表达式。我试过逻辑运算符,但它似乎只接受第一个。此外,在同一字段上使用两个validates方法不会导致任何内容被接受,因为其中一个违反了另一个条件 用实际的语言来解释,比如说我只想要gmail或yahoo之类的邮件,别的什么都不要。我如

我正在尝试使用模型文件中的validates\u format\u验证电子邮件地址。但是,对于两种特殊情况,我需要输入两个正则表达式。基本上,只允许少数顶级域名

然而,根据验证的源代码,它似乎只允许一个:格式键和一组选项作为散列值。有没有一种方法可以使用多个正则表达式。我试过逻辑运算符,但它似乎只接受第一个。此外,在同一字段上使用两个validates方法不会导致任何内容被接受,因为其中一个违反了另一个条件

用实际的语言来解释,比如说我只想要gmail或yahoo之类的邮件,别的什么都不要。我如何使用正则表达式来表示两者,而不表示其他内容?这是我的gmail代码,它可以工作:

验证以下内容的格式::email,:with=>(/^([^@\s]+)@((?:gmail+)+[a-z]{2,})$/i)

如何将其更改为包含另一个顶级域名

validates_format_of :email, 
    :with => (/^([^@\s]+)@((gmail|yahoo|hotmail)\.+[a-z]{2,})$/i)
像这样的

[a-z]最后不会捕获“.com.au”或类似的内容,可以吗

而且


根据@Neet324的答案,您可以使用:

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

捕获任何电子邮件域,包括子域和国家级顶级域。

谢谢!是的,在这种情况下,[a-z]约束不是问题。
validates_format_of :email, :with => (/^([^@\s]+)@((\.?\w+)+)$/i)