2011-02-17 16 views
0

我想通過正則表達式驗證許多郵件(一個或多個),但此屬性不屬於任何模型。所以我寫了一個方法:匹配方法的正則表達式問題

def emails_are_valid?(emails) 
    #regex with validation 
    regex = Regexp.new("^(\s*[a-zA-Z0-9\._%-][email protected][a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*([,]{1}[\s]*[a-zA-Z0-9\._%-][email protected][a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*)*)$") 
    #if the quantity of emails is zero o its validations is bad return false. 
    if emails.blank? || emails.match(regex).nil? 
      return false 
     else 
      return true 
     end 
end 

我評價這個字符串[email protected] AA,[email protected]當 我http://www.rubular.com/測試這個表達式是不好的(不匹配)。 所以根據這個頁面,我的正則表達式可以。

但是當我評估emails.match(正則表達式).nil?返回我false(所以字符串是有效的,但這個字符串是壞)

請我需要幫助。我的正則表達式不好或我的emails_are_valid?方法不好或匹配方法不好。

在此先感謝。

+1

這將是對你有好處閱讀(HTTP [正則表達式識別電子郵件地址硬的?]://計算器。 com/q/156430/128421),並看看你是否真的想試圖使用正則表達式來驗證電子郵件地址,或者只是發現電子郵件是否會實際發送到一個地址。區別在於地址看起來不錯,或者有一個你知道的地址是好的。 [搜索StackOverflow](http://stackoverflow.com/search?q=%2Bregex+%2Bemail)的類似問題。 – 2011-02-17 18:03:05

+0

@ The Tin Man我想驗證格式,我想驗證郵件格式和逗號分隔列表,不管它們和逗號之間的空間大小。但是,當我放置一個空格+歌詞+昏迷+ other_mail匹配方法返回,如果它是正確的 – maxiperez 2011-02-17 18:07:49

回答

1

在聲明您的正則表達式時,您應該使用單引號而不是雙引號,否則將\s解析爲轉義序列。

把上面一行

regex = Regexp.new('^(\s*[a-zA-Z0-9\._%-][email protected][a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*([,]{1}[\s]*[a-zA-Z0-9\._%-][email protected][a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*)*)$') 

和方法會奏效。

在一個側面說明,這將是做同樣的事情更簡潔的方式 - http://codepad.org/YbsqIkcP