У меня есть это регулярное выражение для фильтрации URL-адресов, но оно также отфильтровывает некоторые недействительные URL-адреса
$regexUrl = "((https?|ftp)\:\/\/)?"; // SCHEME
$regexUrl .= "([a-zA-Z0-9+!*(),;?&=\$_.-]+(\:[a-zA-Z0-9+!*(),;?&=\$_.-]+)?@)?"; // User and Pass
$regexUrl .= "([a-zA-Z0-9-.]*)\.([a-zA-Z]{2,3})"; // Host or IP
$regexUrl .= "(\:[0-9]{2,5})?"; // Port
$regexUrl .= "(\/([a-zA-Z0-9+\$_-]\.?)+)*\/?"; // Path
$regexUrl .= "(\?[a-zA-Z+&\$_.-][a-zA-Z0-9;:@&%=+\/\$_.-]*)?"; // GET Query
$regexUrl .= "(#[a-zA-Z_.-][a-zA-Z0-9+\$_.-]*)?"; // Anchor
например, "http: //...XYZ" также фильтруется приведенным выше регулярным выражением, но это неверный URL.
Любая помощь будет оценена