Я использую python и хотел бы простое api или regex проверить правильность имени домена. По действительности я являюсь синтаксической достоверностью, а не тем, действительно ли доменное имя существует в Интернете или нет.Проверьте правильность доменного имени в строке?
ответ
Любое доменное имя является (синтаксически) действительным, если это список идентификаторов, разделенных точками, длиной не более 63 символов и состоящий из букв, цифр и тире (без подчеркивания).
Итак:
r'[a-zA-Z\d-]{,63}(\.[a-zA-Z\d-]{,63})*'
будет начало. Конечно, в эти дни могут быть разрешены некоторые символы не-Ascii (очень недавняя разработка), которая сильно изменяет параметры - вам нужно иметь дело с этим?
может ли идентификатор начинать/заканчивать дефисом? – Amarghosh
Спасибо! Нет, мне не нужна какая-то базовая проверка здравомыслия, чтобы убедиться, что она не содержит черных списков, таких как «! »и т. д. – demos
Алекс, я знаю, что вы являетесь агентом по приложению, пожалуйста, помогите мне с этим: http: // stackoverflow.com/questions/2894808/create-auto-incrementing-column-in-google-appengine Заранее спасибо! – demos
r'^(?=.{4,255}$)([a-zA-Z0-9][a-zA-Z0-9-]{,61}[a-zA-Z0-9]\.)+[a-zA-Z0-9]{2,5}$'
- Lookahead гарантирует, что он имеет как минимум 4 (
a.in
) и максимум 255 символов - одну или несколько меток (разделенных периодов) длиной от 1 до 63, начиная и заканчивая с буквенно-цифровыми символами и содержащими буквенно-цифровые символы и дефисы в середине.
- Вслед за именем домена верхнего уровня (чья максимальная длина составляет 5 для музея)
Это не может хранить punycode. Th e кратчайший двухбуквенный домен верхнего уровня кириллического сценария - 6 букв в punycode. – kaleissin
музей - 6 символов, а не 5. –
Плохая идея жестко кодировать ожидаемую длину TLD, особенно сейчас, когда выходят IDN TLD, которые закодированы и, таким образом, выходят намного дольше, чем 5. –
Заметим, что в то время как вы можете сделать что-то с регулярными выражениями, тем самый надежный способ проверки действительных доменных имен это на самом деле пытаюсь разрешить имя (с socket.getaddrinfo):
from socket import getaddrinfo
result = getaddrinfo("www.google.com", None)
print result[0][4]
Обратите внимание, что технически это может оставить вас открытым для атак DoS (если кто-то отправляет тысячи недействительных доменных имен, это может занять некоторое время, чтобы решить недопустимое NAM es), но вы можете просто оценить - ограничить кого-то, кто пытается это сделать.
Преимущество этого в том, что он будет считать «hotmail.con» недействительным (вместо «hotmail.com», скажем), тогда как в регулярном выражении будет указано, что «hotmail.con» действителен.
Это действительно отдельная проблема и не очень хороший ответ на вопрос. Учитывая, что DNS использовался в прошлом для эксплойтов, проверка того, что строка, по крайней мере, действительна до ее использования, является разумной, а также на порядок быстрее, чем поиск DNS. Это похоже на запуск кода, чтобы узнать, злонамерен ли он! – Synchro
Это не может использоваться для проверки имен доменов, которые должны быть созданы, только для уже существующих. – nerdoc
Почему действительный url нравится: 'https: // google.com /' возвращать ошибку? –
Я использую это:
(r'(\.|\/)(([A-Za-z\d]+|[A-Za-z\d][-])+[A-Za-z\d]+){1,63}\.([A-Za-z]{2,3}\.[A-Za-z]{2}|[A-Za-z]{2,6})')
, чтобы гарантировать ее следует либо после точки (WWW.) Или/(HTTP: //) и тир происходит только в имени и в соответствии аббревиатуру как gov.uk тоже.
Ответы все довольно устарели от спецификации на данный момент. Я считаю, что приведенное ниже будет точно соответствовать текущей спецификации:
r'^(?=.{1,253}$)(?!.*\.\..*)(?!\..*)([a-zA-Z0-9-]{,63}\.){,127}[a-zA-Z0-9-]{1,63}$'
- 1. Проверьте правильность имени домена
- 2. ASIHTTPRequest: проверьте правильность имени пользователя и пароля
- 3. Проверьте правильность имени файла с Qt
- 4. Проверьте правильность имени файла с регулярным выражением
- 5. доменного имени Tomcat в
- 6. Проверьте правильность строки в C
- 7. Проверьте правильность порядка скобок
- 8. Передача доменного имени PayPal
- 9. Разбор доменного имени
- 10. Приобретение доменного имени
- 11. Perl: Извлечение доменного имени
- 12. cakePHP без доменного имени
- 13. настройка доменного имени
- 14. Доступность доменного имени
- 15. доменного имени префикс
- 16. Проверьте правильность имени пользователя FTP и пароля в PowerShell
- 17. Проверьте правильность этого SQL-запроса
- 18. Извлечение доменного имени в MYSQL
- 19. Перенаправление доменного имени в Laravel
- 20. Проверьте правильность XSD
- 21. Проверьте правильность правильного файла
- 22. Проверьте правильность файлов HDF5
- 23. Проверьте правильность строки JSON?
- 24. Проверьте правильность пароля jQuery
- 25. Haskell: проверьте правильность строки.
- 26. Проверьте правильность ответа
- 27. проверьте правильность ввода пользователем
- 28. Проверьте правильность установки uri
- 29. Проверьте правильность переданных пакетов
- 30. Проверьте правильность расширения файла
По какой причине? Если это, скажем, электронная почта, реальную достоверность следует проверить, выполнив DNS-запрос для записи MX, а не по регулярному выражению. – Kimvais
Нет. Существует нулевая выгода при поиске похожих имен, это просто пустая трата времени и ресурсов. Также вам не нужна запись MX для доставки электронной почты, достаточно записи A. – Synchro
Кажется, это уже обсуждалось [ЗДЕСЬ] (http://stackoverflow.com/questions/1128168/validation-for-url-domain-using-regex-rails). – Incognito