0

Есть такое регулярное выражение, которое распознаёт url:

preg_match('#^(https?|ftp)://[a-zA-z0-9]+([\-.][a-zA-z0-9]+)*/?$#', $link);

Всё вроде-бы работает корректно, но почему-то url нижним подчёркиванием, например: http://test_ing.com он распознаёт как верное. В чём может быть проблема? В выражение же нигде не фигурирует "_".

1 ответ 1

1

Присмотритесь вот сюда

[a-zA-z0-9]

В промежуток от A-z, попадают все спец. символы. Правильное выражение:

preg_match('#^(https?|ftp)://[a-zA-Z0-9]+([\-.][a-zA-Z0-9]+)*/?$#', $link);
2
  • Да, действительно. Проглядел. Спасибо! Если в промежуток A-z попадают все спецсимволы, то к примеру такой адрес: test#ing.com должен отработать верно, но он же отрабатывает false.
    – PiterPan
    27 июл 2014 в 19:31
  • @PiterPan, Внимательно изучите символы юникода, в промежутке от A до a, находятся только [, ], \, ^, _, `.
    – Manitikyl
    27 июл 2014 в 20:05

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.