Regex для проверки URL - не проверять HTTP? - PullRequest
1 голос
/ 14 февраля 2010

Я знаю, что здесь есть множество вопросов, чтобы подтвердить веб-адрес чем-то вроде этого

/^[a-zA-Z]+[:\/\/]+[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i

Единственная проблема заключается в том, что не все используют http:// или что-либо еще, поэтому я хотел найти способ использовать preg_match(), но не проверять http, поскольку должен иметь , но больше a на самом деле не имеет значения, я изменил его на это, но затем он отклоняет URL, в котором он имеет есть http://:

/^[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i

Я надеялся еще проверить это на этих условиях

  • Если он имеет http: // или www, просто проигнорируйте это
  • Если .extension больше 9, то отклонить
  • Если он содержит нет полных остановок

Кто-нибудь есть идея, спасибо:)

Ответы [ 4 ]

2 голосов
/ 14 февраля 2010

Разве вы не можете просто использовать встроенную функцию filter_var?

filter_var('example.com', FILTER_VALIDATE_URL);

Не уверен насчет предела расширения в девять символов, но я думаю, вы могли бы легко проверить это на дополнительном этапе.

0 голосов
/ 14 февраля 2010

не все используют http://

Они должны.Без схемы это просто не URL-адрес, и пропуск его может вызвать странные проблемы.Например:

www.example.com:8080/file.txt

Это действительный URL-адрес с несуществующей схемой www.example.com:.

Если вы уверены, что нормальная схема должна быть http:, вы можете попробоватьавтоматически добавляя http://, чтобы «исправить» любой URL, который не начинается с https?:, перед проверкой.Но вы не должны разрешать / сохранять / возвращать бесхарактерные URL-адреса в течение более длительного срока.

Кстати, текущее регулярное выражение, которое вы используете, далеко от точного согласно официальному синтаксису URI (см. RFC 3986).Это запретит многие допустимые символы URI, не говоря уже о символах Unicode в IRI.Если вы хотите правильную проверку, вы должны использовать настоящий URL-парсер;если вам нужна быстрая проверка на наличие очевидных проблем, вы должны использовать что-то более разрешающее.Например, просто проверяя отсутствие категорически недопустимых символов, таких как пробел и ".

0 голосов
/ 14 февраля 2010
/^(http\://|www\.)/

/^.+?\.\S{0,9}\./

/\./

Это должно работать для ваших пунктов пули?

0 голосов
/ 14 февраля 2010

Почему бы не задать перед регулярным выражением стадию простого удаления http://, если она есть? То же самое относится к www. Это может сделать вашу жизнь немного проще.

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