Я искал простое регулярное выражение для URL-адресов, есть ли у кого-нибудь под рукой, что хорошо работает? Я не нашел ни одного с классами проверки фреймворка zend и видел несколько реализаций.
php
regex
url
validation
AndreLiem
источник
источник
Ответы:
Я использовал это в нескольких проектах, я не думаю, что столкнулся с проблемами, но уверен, что это не исчерпывающий:
Большая часть случайного мусора в конце предназначена для ситуаций, подобных
http://domain.com.
предложению (чтобы избежать совпадения с конечной точкой). Я уверен, что это можно было бы очистить, но так как это сработало. Я более или менее просто скопировал это из проекта в проект.источник
google.com
это действительный относительный URL-адрес, но не действительный абсолютный URL-адрес. И я думаю, это то, что он ищет.http://example.com/somedir/...
- это что-то вроде совершенно законного URL-адреса, запрашивающего имя файла,...
которое является допустимым именем файла.http://www.example
как действительныйИспользуйте эту
filter_var()
функцию, чтобы проверить, является ли строка URL-адресом или нет:Использование регулярных выражений без необходимости - плохая практика.
РЕДАКТИРОВАТЬ : будьте осторожны, это решение не безопасно для юникода и не безопасно для XSS. Если вам нужна сложная проверка, возможно, лучше поискать где-нибудь еще.
источник
http://www
Согласно руководству по PHP - parse_url не следует использовать для проверки URL.
К сожалению, похоже, что
filter_var('example.com', FILTER_VALIDATE_URL)
это не работает лучше.Оба
parse_url()
иfilter_var()
будут передавать искаженные URL-адреса, такие какhttp://...
Поэтому в этом случае - регулярное выражение - лучший метод.
источник
На всякий случай вы хотите узнать, действительно ли существует URL-адрес:
источник
$url
прежде чем на самом деле проверить, действительно ли URL-адрес, потому что вышеуказанная операция стоит дорого - возможно, до 200 миллисекунд в зависимости от размера файла. В некоторых случаях URL-адрес может фактически не иметь доступного ресурса в своем местоположении (например, создание URL-адреса для изображения, которое еще не было загружено). Кроме того, вы не используете кешированную версию, поэтому она неfile_exists()
будет кэшировать статистику в файле и возвращаться почти мгновенно. Однако предоставленное вами решение по-прежнему полезно. Почему бы просто не использоватьfopen($url, 'r')
?По словам Джона Грубера (Дерзкий огненный шар):
Regex:
использование в preg_match ():
Вот расширенный шаблон регулярного выражения (с комментариями):
Для получения дополнительной информации посетите: http://daringfireball.net/2010/07/improved_regex_for_matching_urls
источник
Я не думаю, что в данном случае разумно использовать регулярные выражения. Невозможно сопоставить все возможности, и даже если вы это сделали, все равно есть вероятность, что URL-адрес просто не существует.
Вот очень простой способ проверить, действительно ли URL существует и доступен для чтения:
(если нет,
preg_match
это также проверит все имена файлов на вашем сервере)источник
Пользуюсь этим успешно - не помню, откуда взял
источник
источник
И вот ваш ответ =) Попробуй сломать, не получается !!!
источник
Изменить:
как указано в инциденте , этот код УСТАРЕЛ с выпуском PHP 5.3.0 (2009-06-30) и должен использоваться соответственно.
Всего два цента, но я разработал эту функцию и уже какое-то время успешно ее использую. Он хорошо документирован и отделен, поэтому вы можете легко его изменить.
источник
источник
Вдохновленный этим вопросом .NET StackOverflow и этой упомянутой статьей из этого вопроса, есть этот валидатор URI (URI означает, что он проверяет и URL, и URN).
Я успешно протестировал эту функцию внутри объекта ValueObject, который я назвал
Uri
и проверилUriTest
.UriTest.php (содержит допустимые и недопустимые случаи для URL-адресов и URN)
Uri.php (объект значения)
Запуск модульных тестов
В 46 тестах 65 утверждений. Внимание: есть 2 поставщика данных для действительных и еще 2 для недопустимых выражений. Один предназначен для URL-адресов, а другой - для URN. Если вы используете версию PhpUnit v5.6 * или более раннюю, вам необходимо объединить два поставщика данных в одного.
Покрытие кода
В этом примере средства проверки URI покрытие кода составляет 100%.
источник
(http (s?): //) означает http: // или https: //
([a-z0-9 -] +.) + => 2.0 [a-z0-9-] означает любой символ az или любой знак 0-9 или (-))
"/(http(s?)://)(((a-z0-9--)+.)+[azpting{2,4}(.[azpting{2,4}) (/ [^] + ) / i "
Примечание: извините за плохой английский. Моя страна не очень хорошо этим пользуется.
источник
Хорошо, это немного сложнее, чем простое регулярное выражение, но оно позволяет использовать разные типы URL-адресов.
Примеры:
Все это следует отметить как действительные.
Обратите внимание, что есть проверка in_array для протоколов, которые вы хотите разрешить (в настоящее время в этом списке есть только http и https).
источник
Лучший URL Regex, который работал у меня:
Примеры:
Источник: http://urlregex.com/
источник
Regex Питера мне не подходит по многим причинам. Он позволяет использовать всевозможные специальные символы в доменном имени и не требует особых проверок.
Функция Фрэнки мне нравится, и вы можете создать хорошее регулярное выражение из компонентов, если вам не нужна функция, например:
Не проверено, но я думаю, что это должно сработать.
Кроме того, ответ Оуэна тоже не выглядит на 100%. Я взял доменную часть регулярного выражения и протестировал ее на инструменте тестера Regex http://erik.eae.net/playground/regexp/regexp.html
Ставлю такую строчку:
в разделе "regexp" и следующую строку:
в разделе «образец текста».
Результат пропустил минус. Потому что \ S означает любой непробельный символ.
Обратите внимание, что регулярное выражение от Frankie обрабатывает минус, потому что в нем есть эта часть для первого символа:
Что не позволяет использовать минус или какой-либо другой специальный символ.
источник
Вот как я это сделал. Но я хочу сказать, что я не так уверен в регулярном выражении. Но это должно сработать у тебя :)
Таким образом, вам не понадобится маркер eval на вашем шаблоне.
Надеюсь, поможет :)
источник
Вот простой класс для проверки URL с использованием RegEx, а затем перекрестных ссылок домена на популярные серверы RBL (Realtime Blackhole Lists):
Установка:
Использование:
Добавьте URL-адрес в качестве параметра
domain()
метода и проверьте результат.Вывод:
Как вы можете видеть выше, www.bokranzr.com указан как вредоносный веб-сайт через RBL, поэтому домен был возвращен как ложный.
источник
Для всех, кто разрабатывает с помощью WordPress, просто используйте
для проверки URL ( здесь документация WordPress
esc_url_raw
). Он обрабатывает URL - адрес намного лучше , чем ,filter_var($url, FILTER_VALIDATE_URL)
потому что это юникод и XSS-сейф. ( Вот хорошая статья, в которой упоминаются все проблемы сfilter_var
).источник
Я обнаружил, что это наиболее полезно для сопоставления URL-адресов.
источник
ftp:
?Для этого есть встроенная функция PHP:
Возвращает отфильтрованные данные или FALSE, если фильтр не работает.
Проверить это здесь
источник