2013-08-25 146 views
1

我想在我的模型文件中使用validates_format_of來驗證電子郵件地址。但是,我需要爲兩個特殊情況輸入兩個正則表達式。基本上,只有少數幾個頂級域名是被允許的。RoR電子郵件驗證 - 多個正則表達式/格式

但是,它似乎根據驗證的源代碼,它只允許一個:格式鍵和一組選項作爲散列值。有沒有辦法使用多個正則表達式。我已經嘗試過邏輯運算符,但它似乎只接受第一個。另外,在同一領域使用兩種驗證方法導致沒有任何事情被接受,因爲一個違反了其他條件

要說明實際條件,說我只想發電子郵件是Gmail或雅虎,沒有別的。我如何使用正則表達式來表示兩者,而不是其他東西?這是我的gmail代碼,它的工作原理如下:

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

如何將其更改爲包含其他頂級域名?

回答

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 
+0

感謝它的工作!而且,在這種情況下,[a-z]約束不是問題。 – thepervysage

0

要建立在@ Neet324的回答,您可以使用:

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

捕捉到任何電子郵件域,包括子域和國家層面的頂層域名。

相關問題