1

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

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

用实际的术语来解释,假设我只想使用 gmail 或 yahoo 的电子邮件,而不是其他电子邮件。我如何使用正则表达式来表示两者而不是别的?这是我的 gmail 代码,它可以工作:

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

如何更改它以包含另一个顶级域名?

4

2 回答 2

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
于 2013-08-25T19:13:26.040 回答
0

要基于@Neet324 的答案,您可以使用:

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

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

于 2013-08-26T04:28:48.577 回答