[JS][PHP] Regexp for matching URL Pattern

regexp Regexp Pattern Untuk mencocokkan semua jenis URL, kode berikut seharusnya berfungsi:


<?php
$regex = "((https?|ftp)://)?"; // SCHEME
$regex .= "([a-z0-9+!(),;?&=$_.-]+(:[a-z0-9+!(),;?&=$.-]+)?@)?"; // User and Pass
$regex .= "([a-z0-9-.]*).(([a-z]{2,4})|([0-9]{1,3}.([0-9]{1,3}).([0-9]{1,3})))"; // Host or IP
$regex .= "(:[0-9]{2,5})?"; // Port
$regex .= "(/([a-z0-9+$
%-].?)+)/?"; // Path
$regex .= "(?[a-z+&$.-][a-z0-9;:@&%=+/$.-]
)?"; // GET Query
$regex .= "(#[a-z_.-][a-z0-9+$%_.-]*)?"; // Anchor
?>

Example: correctly way for matching URL


<?php
if(preg_match("^$regex$i", 'www.example.com/etcetc', $m))
var_dump($m);

if(preg_match("^$regex$i", 'http://www.example.com/etcetc', $m))
var_dump($m);
?>
Pattern diatas bisa digunakan di javascript. Bedanya dengan diatas hanya dari segi variablenya saja. Bila di PHP variable dituliskan dengan awalan ($) maka di javascript cukup diganti (var) atau (let) atau (const)