Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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 Rails 6-符合RFC5322的电子邮件验证_Regex_Ruby_Email_Ruby On Rails 6_Email Validation - Fatal编程技术网

Regex Rails 6-符合RFC5322的电子邮件验证

Regex Rails 6-符合RFC5322的电子邮件验证,regex,ruby,email,ruby-on-rails-6,email-validation,Regex,Ruby,Email,Ruby On Rails 6,Email Validation,这是一个PCRE正则表达式。它可以验证电子邮件地址 ruby是否有符合RFC5322的正则表达式?Ruby有URI::MailTo::EMAIL\u REGEXP,但我认为它不符合RFC5322 另一篇文章提到了这个“邮件”宝石,但我看不到用它来验证电子邮件地址的方法 PERC RFC5322兼容 (?(定义) (?(?&local_部分)@(?&domain)) (?(?&dot_原子);(?"ed_字符串);(?&obs_局部部分)) (?(?&dot_原子)|(?&domain_

这是一个PCRE正则表达式。它可以验证电子邮件地址

ruby是否有符合RFC5322的正则表达式?Ruby有
URI::MailTo::EMAIL\u REGEXP
,但我认为它不符合RFC5322

另一篇文章提到了这个“邮件”宝石,但我看不到用它来验证电子邮件地址的方法

PERC RFC5322兼容
(?(定义)
(?(?&local_部分)@(?&domain))
(?(?&dot_原子);(?"ed_字符串);(?&obs_局部部分))
(?(?&dot_原子)|(?&domain_文字)|(?&obs_domain))
(?(?&CFWS)?\[(?:(?&FWS)?(?&dtext))*(?&FWS)?\](?&CFWS)?)
(?[\x21-\x5a]|[\x5e-\x7e]|(?&obs\u dtext))
(?\ \(?:(?&VCHAR)|((?&WSP))|((?&obs\U qp))
(?(?&CFWS)?(?&dot_原子_文本)(?&CFWS)?)
(?(?&atext)(?:\(?&atext))*)
(?[a-zA-Z0-9!#$%&'*+\/=?^{{124;}~-]+)
(?(?&CFWS)?(?&atext)(?&CFWS)?)
(?(?&atom)|(?"ed_字符串))
(?(?&CFWS)?“(?:(?&FWS)?(?&qcontent))*(?&FWS)?”(?&CFWS)?)
(?(?&qtext)|(?"ed_对))
(?\x21 |[\x23-\x5b]|[\x5d-\x7e]|(?&obs\u qtext))
#注释和空白
((?:(?&WSP)*\r\n)?(?&WSP)+|(?&obs_-FWS))
(?(?:(?&FWS)?(?&comment))+(?&FWS)?|(?&FWS))
(?\((?:(?&FWS)?(?&ccontent))*(?&FWS)?\)
(?(?&ctext)|(?"ed|对)|(?&comment))
(?[\x21-\x27]|[\x2a-\x5b]|[\x5d-\x7e]|(?&obs\ctext))
#过时代币
(?(?&原子)(?:\.(?&原子))*)
(?(?&word)(?:\(?&word))*)
((?(?&obs_-NO_-WS_-CTL)(?"ed_-pair))
(?\\(?:\x00 |)(?&obs\u NO\u WS\u CTL)\n\r))
(?(?&WSP)+(?:\r\n(?&WSP)+*))
((((?&obs\U NO\U WS\U CTL))
((((?&obs\U NO\U WS\U CTL))
(?[\x01-\x08]|\x0b |\x0c |[\x0e-\x1f]|\x7f)
#字符类定义
(?[\x21-\x7E])
(?[\t])
)
^(?&addr_规范)$

PCRE到Onigom递归/子程序正则表达式的转换是直接的:

  • 删除不支持的
    (?(定义)…)
    构造
  • 将用于定义消费模式的所有命名组放在正则表达式的开头,并对所有组应用一个
    {0}
    量词,以便它们不匹配任何内容
  • (?&…
    替换为
    \g
    语法(我刚刚在记事本++中用
    \(\?&(\w+)\)
    替换为
    \\g
在Ruby中工作的最终表达式如下

re=/(?)

p re.match?('+1~1+@iana.org')#=>true
p关于匹配?('test@[123.123.123.123')#=>false

你真的展示了RFC5322和正则表达式的阴暗面。我想Ruby中没有这样的正则表达式,而且Ruby解释器不接受你发布的正则表达式。有没有一个实用的理由让你的Rails应用程序兼容所有可能的电子邮件地址模式?你会推荐什么标准/regex?
(?(DEFINE)
    (?<addr_spec> (?&local_part) @ (?&domain) )
    (?<local_part> (?&dot_atom) | (?&quoted_string) | (?&obs_local_part) )
    (?<domain> (?&dot_atom) | (?&domain_literal) | (?&obs_domain) )
    (?<domain_literal> (?&CFWS)? \[ (?: (?&FWS)? (?&dtext) )* (?&FWS)? \] (?&CFWS)? )
    (?<dtext> [\x21-\x5a] | [\x5e-\x7e] | (?&obs_dtext) )
    (?<quoted_pair> \\ (?: (?&VCHAR) | (?&WSP) ) | (?&obs_qp) )
    (?<dot_atom> (?&CFWS)? (?&dot_atom_text) (?&CFWS)? )
    (?<dot_atom_text> (?&atext) (?: \. (?&atext) )* )
    (?<atext> [a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+ )
    (?<atom> (?&CFWS)? (?&atext) (?&CFWS)? )
    (?<word> (?&atom) | (?&quoted_string) )
    (?<quoted_string> (?&CFWS)? " (?: (?&FWS)? (?&qcontent) )* (?&FWS)? " (?&CFWS)? )
    (?<qcontent> (?&qtext) | (?&quoted_pair) )
    (?<qtext> \x21 | [\x23-\x5b] | [\x5d-\x7e] | (?&obs_qtext) )
    # comments and whitespace
    (?<FWS> (?: (?&WSP)* \r\n )? (?&WSP)+ | (?&obs_FWS) )
    (?<CFWS> (?: (?&FWS)? (?&comment) )+ (?&FWS)? | (?&FWS) )
    (?<comment> \( (?: (?&FWS)? (?&ccontent) )* (?&FWS)? \) )
    (?<ccontent> (?&ctext) | (?&quoted_pair) | (?&comment) )
    (?<ctext> [\x21-\x27] | [\x2a-\x5b] | [\x5d-\x7e] | (?&obs_ctext) )
    # obsolete tokens
    (?<obs_domain> (?&atom) (?: \. (?&atom) )* )
    (?<obs_local_part> (?&word) (?: \. (?&word) )* )
    (?<obs_dtext> (?&obs_NO_WS_CTL) | (?&quoted_pair) )
    (?<obs_qp> \\ (?: \x00 | (?&obs_NO_WS_CTL) | \n | \r ) )
    (?<obs_FWS> (?&WSP)+ (?: \r\n (?&WSP)+ )* )
    (?<obs_ctext> (?&obs_NO_WS_CTL) )
    (?<obs_qtext> (?&obs_NO_WS_CTL) )
    (?<obs_NO_WS_CTL> [\x01-\x08] | \x0b | \x0c | [\x0e-\x1f] | \x7f )
    # character class definitions
    (?<VCHAR> [\x21-\x7E] )
    (?<WSP> [ \t] )
)
^(?&addr_spec)$