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

时间:2013-08-25 18:45:52

标签: ruby-on-rails email validates-uniqueness-of

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

但是,似乎根据验证的源代码,它只允许一个:格式键和一组选项作为哈希值。有没有办法使用多个正则表达式。我尝试过逻辑运算符,但它似乎只接受第一个运算符。此外,在同一字段上使用两个验证方法会导致没有被接受,因为一个违反了另一个条件

用实际的方式解释一下,说我只想发送gmail或yahoo等电子邮件。如何使用正则表达式来表示两者而不是其他内容?这是我的gmail代码,它可以工作:

validates_format_of:email,:with => (/^([^@\s]+)@((?:gmail+.)+[a-z]{2,})$/i)

如何将其更改为包含其他顶级域名?

2 个答案:

答案 0 :(得分:2)

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

这样的事情?

[a-z]最后不会捕获像'.com.au'或类似的东西,这样可以吗?

此外,

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

答案 1 :(得分:0)

要建立@ Neet324的答案,你可以使用:

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

捕获任何电子邮件域,包括子域和国家/地区级域名。