Проверка правильности веб-адреса, регулярных выражений в PHP - PullRequest
0 голосов
/ 30 августа 2010

У меня есть этот текстовый ввод, и мне нужно проверить, является ли строка действительным веб-адресом, например http://www.example.com.Как это можно сделать с помощью регулярных выражений в PHP?

Ответы [ 6 ]

1 голос
/ 30 августа 2010

Используйте расширение фильтра :

filter_var($url, FILTER_VALIDATE_URL);

Это будет намного надежнее любого регулярного выражения, которое вы можете написать.

0 голосов
/ 30 августа 2010

Чтобы соответствовать большему количеству протоколов, вы можете сделать:

((https?|s?ftp|gopher|telnet|file|notes|ms-help)://)?[\w:#@%/;$()~=\.&-]+
0 голосов
/ 30 августа 2010

В большинстве случаев вам не нужно проверять, является ли строка действительным адресом.

Либо так, и веб-сайт будет доступен, либо его не будет, и пользователь просто вернется.

Вы должны избегать нелегальных персонажей, чтобы избежать XSS, если ваш пользователь не хочет давать действительный сайт, это должно быть его проблемой.

(в большинстве случаев).

PS: Если вы все еще хотите проверить URL, посмотрите ответ nikic.

0 голосов
/ 30 августа 2010

Я нашел ниже от http://www.roscripts.com/PHP_regular_expressions_examples-136.html

//URL: Different URL parts
//Protocol, domain name, page and CGI parameters are captured into backreferenes 1 through 4
'\b((?#protocol)https?|ftp)://((?#domain)[-A-Z0-9.]+)((?#file)/[-A-Z0-9+&@#/%=~_|!:,.;]*)?((?#parameters)\?[-A-Z0-9+&@#/%=~_|!:,.;]*)?'

//URL: Different URL parts
//Protocol, domain name, page and CGI parameters are captured into named capturing groups.
//Works as it is with .NET, and after conversion by RegexBuddy on the Use page with Python, PHP/preg and PCRE.
'\b(?<protocol>https?|ftp)://(?<domain>[-A-Z0-9.]+)(?<file>/[-A-Z0-9+&@#/%=~_|!:,.;]*)?(?<parameters>\?[-A-Z0-9+&@#/%=~_|!:,.;]*)?'

//URL: Find in full text
//The final character class makes sure that if an URL is part of some text, punctuation such as a 
//comma or full stop after the URL is not interpreted as part of the URL.
'\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]'

//URL: Replace URLs with HTML links
preg_replace('\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]', '<a href="\0">\0</a>', $text);
0 голосов
/ 30 августа 2010

Вам нужно сначала понять веб-адрес, прежде чем вы сможете начать его эффективно анализировать. Да, http://www.example.com является действительным адресом. Так же как и www.example.com. Или example.com. Или http://example.com. Или prefix.example.com.

Посмотрите спецификации для URI, особенно Синтаксические компоненты .

0 голосов
/ 30 августа 2010

Нашел это:

(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?

Отсюда:

Регулярное выражение, которое проверяет веб-адрес и соответствует пустой строке?

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