Определите, является ли вход доменом - PullRequest
0 голосов
/ 08 мая 2011

Я хотел бы иметь способ определить, является ли вход доменом.

Пример входов:

@stackexchange.com
@gmail.com
@google

Логика:

1. First determine if the first character is an @
2. If the input ends in a domain ext, .X or .XX or .XXX
3. Then determine if the domain (stackexchange, gmail, google) are not blacklisted. For example I might want to blacklist gmail.

Предложения о том, как это сделать? Будет ли это жить в контроллере или модели? Было бы Regex правильным способом сделать это или это было бы замедлить? Спасибо

Идеи:

1. Use params[:q][0,1]

Ответы [ 3 ]

2 голосов
/ 08 мая 2011

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

Вы можете проверить @, если ищете адрес электронной почты, но это не говорит вам, является ли это доменом. Домены не имеют @ знаков.

Домены имеют как минимум один ., например .com. У них есть известный TLD, он же Домен верхнего уровня, который является .com или .me или .info. Проблема с TLD заключается в том, что они открыты для того, что люди хотят, чтобы они были, поэтому в ближайшее время будет трудно выполнить простой поиск.

На мой взгляд, вам лучше всего попытаться подключиться к нему через пинг, электронную почту и http-соединения. Это наиболее вероятные службы, которые будут живы. Вторым вариантом будет попытка разрешить домен, используя что-то вроде этого:

host example.com

который вернет:

example.com has address 192.0.32.10
example.com has IPv6 address 2620:0:2d0:200::10

Позвоните, используя %x{} или обратные кавычки.

Это может помочь прочитать описание " Синтаксис доменного имени " в Википедии для обзора того, что определяет доменное имя, в частности:

DNS-имена могут технически состоять из любого символа, представляемого в октете. Однако разрешенная формулировка доменных имен в корневой зоне DNS и большинстве других поддоменов использует предпочтительный формат и набор символов. Допустимые символы в метке являются подмножеством набора символов ASCII и включают символы от a до z, от A до Z, цифры от 0 до 9 и дефис. Это правило известно как правило LDH (буквы, цифры, дефис). Доменные имена интерпретируются независимо от регистра. Метки не могут начинаться или заканчиваться дефисом.

RFC 3696 - Методы применения для проверки и преобразования имен предоставит вам полные правила.

1 голос
/ 08 мая 2011

Regex - это то, что вы ищете. Для домена с @ впереди это будет что-то вроде:

possible_domain =~ /\A@([-_a-zA-Z0-9]+\.[a-z]{1,3})\Z/
domain_to_check_against_a_blacklist = $1

Что ты хочешь с этим делать? Сохранить его, только когда он действителен? Затем вы должны взглянуть на проверки и validates_format_of .

0 голосов
/ 08 мая 2011

Я бы придерживался http://www.regular -expressions.info / email.html (просто пропустите pre @ stuff)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...