Мне нужно выяснить, действителен ли данный URL-адрес или нет, сценарий должен быть разрешен, если он содержит URL-адреса haviing
1.Генерические домены верхнего уровня. 2. Домены верхнего уровня домена страны относятся к URL-адресу http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains.
Мне нужно сделать это на PHP, это в настоящее время то, что я делаю
$ regexUrl = "((https? | ftp) \: \ / \ /)?"; // СХЕМА $ regexUrl. = "([a-zA-Z0-9 +! * (),; & = \ $ _.-] + (\: [a-zA-Z0-9 +! * (),;? ? & = \ $ _.-] +) @)? "; // Пользователь и пропуск $ regexUrl. = "([a-zA-Z0-9 -] +) \. ([a-zA-Z] {2,3})"; // Хост или IP-адрес $ regexUrl. = "(\: [0-9] {2,5})?"; // Порт $ regexUrl. = "(\ / ([a-zA-Z0-9 + \ $ _-] \.?) +) * \ /?"; // Дорожка $ regexUrl. = "(\? [a-zA-Z + & \ $ _.-] [a-zA-Z0-9;: @ &% = + \ / \ $ _.-] *)?"; // GET Query $ regexUrl. = "(# [a-zA-Z_.-] [a-zA-Z0-9 + \ $ _.-] *)?"; // Якорь ? // если (preg_match_all ( "# \ bhttps: // [^ \ s ()] + (: \ ([\ ш \ г] + \) | ([^ [: пунктуатором] \ s] | /? )) # ", $ message, $ matches1, PREG_PATTERN_ORDER)) // $ pattern = '/ ((https? | ftp) \: (\ / \ /) | (файл \: \ / {2,3}))? (((25 [0-5] | 2 [0 -4] [0-9] | [01] [0-9] [0-9]) \) {3} (25 [0-5] |?. 2 [0-4] [0-9] | [01] [0-9] [0-9])) |? (((([A-Za-Z0-9] +) (\).?) +) (\) (ком |. орг | чистая | г | млн | бизнес | информация | моби | имя | аэро | работа | музей | [AZ] {2})) ([\ /] [. \ / A-Za-Z0-9 \] *) * ([\ /]? (([\] [A-Za-Z0-9] + [\ =] [A-Za-Z0-9 \% \ (\)] *) ([\ &] [а ? -zA-Z0-9] + [\ =] [A-Za-Z0-9 \% \ (\)] *) *)) / '; if (preg_match_all ("/ $ regexUrl /", $ urlMessage, $ matches1, PREG_PATTERN_ORDER)) { пытаться { foreach ($ matches1 [0] как $ urlToTrim1) { $ url = $ urlToTrim1; echo $ url; } } catch (Исключение $ e) { $ URL = "- 1"; } }
Чтобы выяснить, действительно ли это действительный URL-адрес:
filter_var($url, FILTER_VALIDATE_URL)
http://www.php.net/manual/en/function.filter-var.php
Если вы хотите подтвердить, что TLD находится в вашем утвержденном списке (я не знаю, идет ли filter_var
чтобы проверить, действительно ли существует ДВУ):
$host = parse_url($url, PHP_URL_HOST); $tld = substr($host, strrpos($host, '.') + 1); // check if $tld is in a list of allowed TLDs
Или просто попробуйте найти DNS-запись домена, используя gethostbyname
. Если он существует, это действительный домен. *
* Если вы не подменены DNS, если этот случай важен для вас …