我需要验证我尝试过以下表达式的电子邮件
(/ \ B [A-Z0-9 ._%AZ - ] + @(?:[A-Z0-9a-Z - ] +)+ [A-ZA-Z] {2,4} \ Z /)
但如果有人错误地发送xyx @ domain.com @ domain1.com等电子邮件,那么这也是一封有效的电子邮件。请帮我在ruby中获取电子邮件的确切正则表达式。
提前致谢。
答案 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"
第一个和第三个电子邮件地址有效,因为它们与模式匹配,而第二个和第四个电子邮件地址无效。
请不要忘记将三元运算符中的参数放在括号中。