Проверка доменного имени получателя электронной почты с помощью регулярного выражения в Ruby - PullRequest
0 голосов
/ 13 марта 2019

Я хотел бы проверить, есть ли у данного получателя правильный домен с регулярным выражением, но что бы я ни делал, я всегда получаю 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 в секцию name и обмануть сервер. Что мне нужно, это проверить внутри <>

Например, это должно сбой :

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

Потому что @mydomain.com не в <>

Как правильно очистить и проверить домен?

1 Ответ

1 голос
/ 13 марта 2019

Используйте String#[] со следующим регулярным выражением:

'Pratha@mydomain.com <another@gmail.com>'[/(?<=\@)[^@]*?(?=>\z)/]
#⇒ "gmail.com"

Регулярное выражение:

/(?<=\@)[^@]*?(?=>\z)/

Все, что находится между @ и последним закрывающим >, которое не содержит @.


Вы можете просто сравнить его со списком действительных доменов или чем-то еще. Он захватывает домен и возвращает его в виде строки.


Другим способом было бы получить адрес электронной почты и проверить, заканчивается ли он тем, что вам нужно:

from[/(?<=<)[^<>]*?(?=>\z)/]
#⇒ "another@gmail.com"
from[/(?<=<)[^<>]*?(?=>\z)/].end_with?('@gmail.com')
#⇒ true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...