У меня был шаблон регулярного выражения url:
$pattern = "@\b(https?://[^\s()<>\[\]\{\}]{1,".$max_length_allowed_for_each_url."}(?:\([\w\d]+\)|([^[:punct:]\s]|/)))@";
Похоже, что он работал очень хорошо при проверке любого URL, который я на него набросал, пока я не понял, что https://http://google.com (очевидно, даже stackoverflow считает, что действительный URL (он сделал этот URL кликабельным, а не я, хотя удалил одно из двоеточий) так что, может быть, мне не повезло?) был действительный URL-адрес, когда его, конечно, нет.
Я провел небольшое исследование ... и узнал, что я должен использовать filter_var вместо регулярного выражения для проверки URL PHP в любом случае ... и был разочарован, осознав, что он тоже подвержен этому та же проблема проверки.
Я мог бы легко победить это:
str_replace(array("https://http://","http://https://"), array("http://","https://"), $url);
Но ... это просто кажется неправильным.