Вы можете наблюдать это на любом сайте, использующем Chrome iOS (включая www.google.com), в последней версии Chrome iOS появилась эта ошибка, когда клавиатура не подталкивала содержимое страницы.
Здесь также открыта ошибка хрома: https://bugs.chromium.org/p/chromium/issues/detail?id=916806
Я когда-то должен был записать такой regex для компании, на которую я работал. Решение было этим:
Пример regex:
.*([^\.]+)(com|net|org|info|coop|int|co\.uk|org\.uk|ac\.uk|uk|__and so on__)$
Это работало действительно хорошо и также соответствовало странным, неофициальным верхним уровням как de.com и друзья.
позитивный аспект:
, оборотная сторона этого решения, конечно:
Я не знаю ни о каких библиотеках, но обработка строк доменных имен достаточно легка.
твердая часть знает, ли имя на втором или третьем уровне. Для этого Вам будет нужен файл данных, который Вы поддерживаете (например, для .uk, не всегда третий уровень, некоторые организации (например, bl.uk, jet.uk) существуют на втором уровне).
источник Firefox от Mozilla имеет такой файл данных, проверьте лицензирование Mozilla, чтобы видеть, могли ли Вы снова использовать это.
Вам нужен список того, какие доменные префиксы и суффиксы могут быть удалены. Например:
Префиксы:
www.
Суффиксы:
.com
.co.in
.au.uk
#!/usr/bin/perl -w
use strict;
my $url = $ARGV[0];
if($url =~ /([^:]*:\/\/)?([^\/]*\.)*([^\/\.]+)\.[^\/]+/g) {
print $3;
}
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-адресами и не фильтрует грамматически правильные, но недопустимые, например 'пример .Соединенное Королевство'.
Однако в большинстве случаев это сработает.