在Ruby中使用正则表达式验证电子邮件收件人的域名

时间:2019-03-13 15:55:42

标签: regex ruby

我想用正则表达式检查给定的收件人是否具有正确的域,但是无论如何我总是得到false

代码:

from = "Pratha Burna <prathab@mydomain.com>" # or just "<prathab@mydomain.com>"
from.gsub!(/^\s*<\s*(.*)\s*>\s*$/, '\1')
from.downcase!
puts "checking for #{from}" # this should give only email. But whole from is here.

if from !~ /@mydomain.com$/
    puts "false"
else
    puts "true"
end

if from !~ /@another.com$/
    puts "false"
else
    puts "true"
end

示例应用:https://ideone.com/arAkKm

我需要检查@mydomain.com是否在from变量中作为电子邮件。因为,用户可以将@mydomain.com命名为section并欺骗服务器。我需要检查的是<>

例如,这应该失败

Pratha@mydomain.com <another@gmail.com>

因为@mydomain.com不在<>

如何正确清理并检查域?

1 个答案:

答案 0 :(得分:1)

String#[]与以下正则表达式配合使用:

target=_blank

正则表达式为:

target=_top

'Pratha@mydomain.com <another@gmail.com>'[/(?<=\@)[^@]*?(?=>\z)/] #⇒ "gmail.com" 到最后一个/(?<=\@)[^@]*?(?=>\z)/ 之间的任何内容,其中不包含@


您可以简单地将其与有效域列表或其他内容进行比较。它获取域并以字符串形式返回。


另一种方法是获取电子邮件地址,并检查其是否以您所需的结尾:

>