我希望使用正则表达式验证许多邮件(一个或多个),但此属性不属于任何模型。所以我写了一个方法:
def emails_are_valid?(emails)
#regex with validation
regex = Regexp.new("^(\s*[a-zA-Z0-9\._%-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*([,]{1}[\s]*[a-zA-Z0-9\._%-]+@[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
我评估此字符串mm@somedomain.com aa,mma @ somedomain.com何时 我在http://www.rubular.com/中测试了这个正则表达式是不好的(没有匹配)。 所以根据这个页面我的正则表达式是可以的。
但是当我评估emails.match(正则表达式).nil?返回false(因此字符串有效,但此字符串不正确)
我需要帮助。我的正则表达式是坏的还是我的emails_are_valid?方法不好或匹配方法不好。
提前致谢。
答案 0 :(得分:1)
在声明正则表达式时,您应该使用单引号而不是双引号,否则\s
将被解析为转义序列。
将该行更改为
regex = Regexp.new('^(\s*[a-zA-Z0-9\._%-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*([,]{1}[\s]*[a-zA-Z0-9\._%-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*)*)$')
并且该方法将起作用。
另一方面,这将是一种更简洁的做同样事情的方式 - http://codepad.org/YbsqIkcP