我正在尝试在模型文件中使用validates_format_of来验证电子邮件地址。但是,我需要为两个特殊情况输入两个正则表达式。基本上,只允许少数顶级域名。
但是,似乎根据验证的源代码,它只允许一个:格式键和一组选项作为哈希值。有没有办法使用多个正则表达式。我尝试过逻辑运算符,但它似乎只接受第一个运算符。此外,在同一字段上使用两个验证方法会导致没有被接受,因为一个违反了另一个条件
用实际的方式解释一下,说我只想发送gmail或yahoo等电子邮件。如何使用正则表达式来表示两者而不是其他内容?这是我的gmail代码,它可以工作:
validates_format_of:email,:with => (/^([^@\s]+)@((?:gmail+.)+[a-z]{2,})$/i)
如何将其更改为包含其他顶级域名?
答案 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)
捕获任何电子邮件域,包括子域和国家/地区级域名。