Ruby中的电子邮件正则表达式?

时间:2012-02-16 06:03:15

标签: regex ruby-on-rails-3

我需要验证我尝试过以下表达式的电子邮件

(/ \ B [A-Z0-9 ._%AZ - ] + @(?:[A-Z0-9a-Z - ] +)+ [A-ZA-Z] {2,4} \ Z /)

但如果有人错误地发送xyx @ domain.com @ domain1.com等电子邮件,那么这也是一封有效的电子邮件。请帮我在ruby中获取电子邮件的确切正则表达式。

提前致谢。

3 个答案:

答案 0 :(得分:1)

您可以使用mail gem根据RFC2822解析任何字符串,如下所示:

def valid_email( value )
  begin
   value return false if value == ''
   parsed = Mail::Address.new( value )
   return parsed.address == value && parsed.local != parsed.address
  rescue Mail::Field::ParseError
    return false
  end
end

检查是否提供了电子邮件,即返回false表示空地址,并检查该地址是否包含域名。

邮件gem已包含在Rails中,因此您可以在应用程序的任何位置使用上面的代码。

答案 1 :(得分:1)

您可以使用内置的ruby电子邮件正则表达式URI::MailTo::EMAIL_REGEXP

只需添加 validates_format_of :user_email, with: URI::MailTo::EMAIL_REGEXP在模型中

此外,您可以使用另一种增强正则表达式,请参阅@Daniel建议。

答案 2 :(得分:0)

因此,您要检查Ruby中特定字符串是否是有效的电子邮件地址。

您首先要创建一个存储正则表达式的常量变量。

Regex备忘单上有无数的资源可用于匹配器。

这是正则表达式代码,它将验证字符串是否与后跟电子邮件地址的通用模式匹配。

VALID_EMAIL_REGEX = /\A([\w+\-].?)+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i

如果您看此表达式,则第一部分允许使用名称,数字,破折号和点。接下来,确保使用@符号。最后,后面是a和字母。通常采用something@domain.extension格式。最后,我们确保匹配器对/i不区分大小写。

构建一种验证此模式的方法

def is_valid_email? email
  email =~ VALID_EMAIL_REGEX
end

上述方法称为is_valid_email?,我们正在向其传递名为email的参数。

接下来,我们将根据VALID_EMAIL_REGEX常量检查此参数,以返回true中的false。然后,您可以检查一些用例:

p is_valid_email?("jon@kinney.com") ? "Valid" : "Invalid"
p is_valid_email?("jonkinney.com") ? "Valid" : "Invalid"
p is_valid_email?("jon.k@kinney.com") ? "Valid" : "Invalid"
p is_valid_email?("jon@kinney") ? "Valid" : "Invalid"

执行此代码应输出:

"Valid"
"Invalid"
"Valid"
"Invalid"

第一个和第三个电子邮件地址有效,因为它们与模式匹配,而第二个和第四个电子邮件地址无效。

请不要忘记将三元运算符中的参数放在括号中。