Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Ruby中电子邮件的正则表达式?_Regex_Ruby On Rails 3 - Fatal编程技术网

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

Regex Ruby中电子邮件的正则表达式?,regex,ruby-on-rails-3,Regex,Ruby On Rails 3,我需要验证电子邮件我尝试了以下表达式 (/\b[A-Z0-9.%A-z-]+@(?[A-Z0-9a-z-]+)+[A-Za-z]{2,4}\z/) 但是如果有人发电子邮件,比如xyx@domain.com@domain1.com错误地认为这也是一封有效的电子邮件。请帮助我获得ruby中电子邮件的精确正则表达式 提前感谢。您可以使用gem根据RFC2822解析任何字符串,如下所示: def valid_email( value ) begin value return false if

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

(/\b[A-Z0-9.%A-z-]+@(?[A-Z0-9a-z-]+)+[A-Za-z]{2,4}\z/)

但是如果有人发电子邮件,比如xyx@domain.com@domain1.com错误地认为这也是一封有效的电子邮件。请帮助我获得ruby中电子邮件的精确正则表达式

提前感谢。

您可以使用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中,因此您可以在应用程序中的任何位置使用上面的代码。

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

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

有无数关于Regex备忘单的资源,您可以为匹配者合并这些资源

下面是正则表达式代码,它将验证字符串是否与后跟电子邮件地址的公共模式匹配

VALID\u EMAIL\u REGEX=/\A([\w+\-]。?)+@[A-z\d\-]+(\.[A-z]+)*\.[A-z]+\z/i

如果你看这个表达式,第一部分允许名称、数字、破折号和点。然后确保使用了
@
符号。最后,后面是a
a
和字母。这通常采用
something@domain.extension
。最后,我们将确保matcher对
/i
不区分大小写

构建验证此模式的方法

def is_valid_email? email
  email =~ VALID_EMAIL_REGEX
end
上述方法称为
是否有效\u电子邮件?
,我们将向其传递一个名为
电子邮件
的参数

接下来,我们将根据
VALID\u EMAIL\u REGEX
常量检查此参数,以返回
false
true
。然后,您可以检查一些用例:

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"
第一个和第三个电子邮件地址有效,因为它们与模式匹配,而第二个和第四个电子邮件地址无效


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

您可以使用内置的ruby电子邮件regexp
URI::MailTo::email\u regexp

只需添加
使用模型中的:URI::MailTo::email\u REGEXP验证:user\u电子邮件的格式


另外,您可以使用不同的regexp来增强regexp,请参见@Daniel suggestion。

这是一个额外的字段,我们需要手动验证。可能重复的@prasvin Rails不会进行电子邮件验证?如果是的话,请发布一个文档链接。你知道任何用于相同目的的正则表达式吗?mail gem实际上根据RFC解析电子邮件,并且非常严格。如果您只需要执行一些基本的格式检查,那么可以使用authlogicgem中使用的正则表达式