как получить доменное имя от URL

Вы можете наблюдать это на любом сайте, использующем Chrome iOS (включая www.google.com), в последней версии Chrome iOS появилась эта ошибка, когда клавиатура не подталкивала содержимое страницы.

Здесь также открыта ошибка хрома: https://bugs.chromium.org/p/chromium/issues/detail?id=916806

49
задан Community 23 May 2017 в 02:10
поделиться

6 ответов

Я когда-то должен был записать такой regex для компании, на которую я работал. Решение было этим:

  • Получают список каждого ccTLD и общий домен верхнего уровня доступный. Ваша первая остановка должна быть IANA. Список от Mozilla выглядит большим на первый взгляд, но испытывает недостаток в ac.uk, например, так для этого, это не действительно применимо.
  • Соединение список как пример ниже. А, предупреждающий: Упорядочивание важно! Если бы org.uk появился бы, после Великобритания затем example.org.uk соответствовал бы org вместо [1 120] пример .

Пример regex:

.*([^\.]+)(com|net|org|info|coop|int|co\.uk|org\.uk|ac\.uk|uk|__and so on__)$

Это работало действительно хорошо и также соответствовало странным, неофициальным верхним уровням как de.com и друзья.

позитивный аспект:

  • Очень быстрый, если regex оптимально заказан

, оборотная сторона этого решения, конечно:

  • Рукописный regex, который должен быть обновлен вручную, если ccTLDs изменяются или добавляются. Утомительное задание!
  • Очень большой regex, таким образом, не очень читаемый.
40
ответ дан pi. 7 November 2019 в 11:48
поделиться

Я не знаю ни о каких библиотеках, но обработка строк доменных имен достаточно легка.

твердая часть знает, ли имя на втором или третьем уровне. Для этого Вам будет нужен файл данных, который Вы поддерживаете (например, для .uk, не всегда третий уровень, некоторые организации (например, bl.uk, jet.uk) существуют на втором уровне).

источник Firefox от Mozilla имеет такой файл данных, проверьте лицензирование Mozilla, чтобы видеть, могли ли Вы снова использовать это.

4
ответ дан Richard 7 November 2019 в 11:48
поделиться

Вам нужен список того, какие доменные префиксы и суффиксы могут быть удалены. Например:

Префиксы:

  • www.

Суффиксы:

  • .com
  • .co.in
  • .au.uk
0
ответ дан Gumbo 7 November 2019 в 11:48
поделиться
/^(?:www\.)?(.*?)\.(?:com|au\.uk|co\.in)$/
11
ответ дан jfs 7 November 2019 в 11:48
поделиться
#!/usr/bin/perl -w
use strict;

my $url = $ARGV[0];
if($url =~ /([^:]*:\/\/)?([^\/]*\.)*([^\/\.]+)\.[^\/]+/g) {
  print $3;
}
-1
ответ дан 7 November 2019 в 11:48
поделиться
import urlparse

GENERIC_TLDS = [
    'aero', 'asia', 'biz', 'com', 'coop', 'edu', 'gov', 'info', 'int', 'jobs', 
    'mil', 'mobi', 'museum', 'name', 'net', 'org', 'pro', 'tel', 'travel', 'cat'
    ]

def get_domain(url):
    hostname = urlparse.urlparse(url.lower()).netloc
    if hostname == '':
        # Force the recognition as a full URL
        hostname = urlparse.urlparse('http://' + uri).netloc

    # Remove the 'user:passw', 'www.' and ':port' parts
    hostname = hostname.split('@')[-1].split(':')[0].lstrip('www.').split('.')

    num_parts = len(hostname)
    if (num_parts < 3) or (len(hostname[-1]) > 2):
        return '.'.join(hostname[:-1])
    if len(hostname[-2]) > 2 and hostname[-2] not in GENERIC_TLDS:
        return '.'.join(hostname[:-1])
    if num_parts >= 3:
        return '.'.join(hostname[:-2])

Этот код не гарантирует работу со всеми URL-адресами и не фильтрует грамматически правильные, но недопустимые, например 'пример .Соединенное Королевство'.

Однако в большинстве случаев это сработает.

3
ответ дан 7 November 2019 в 11:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: