用正则表达式匹配 URL
正则表达式一开始可能会让人望而生畏,但它们为不同的数据类型提供了强大的模式匹配功能。在提取 URL 的上下文中,需要一种灵活的模式来适应 URL 格式的变化。
一个强大的正则表达式,可以捕获带有或不带有领先协议的 URL(例如,“http://www”或“ www") 是:
((https?|ftp)://)? // Optional SCHEME ([a-z0-9 !*(),;?&=$_.-] (:[a-z0-9 !*(),;?&=$_.-] )?@)? // Optional User and Pass ([a-z0-9\-\.]*)\.(([a-z]{2,4})|([0-9]{1,3}\.([0-9]{1,3})\.([0-9]{1,3}))) // Host or IP address (:[0-9]{2,5})? // Optional Port (/([a-z0-9 $_%-]\.?) )*/? // Path (\?[a-z &\$_.-][a-z0-9;:@&%= /$_.-]*)? // Optional GET Query (#[a-z_.-][a-z0-9 $%_.-]*)? // Optional Anchor
要在 PHP 中使用此表达式,请将其括在双引号中,并将其与要计算的 URL 一起传递给 preg_match 函数。例如:
$url = 'www.example.com/etcetc';
if (preg_match("~^$regex$~i", $url)) {
echo 'Matched URL without protocol';
}
同样,对于带有协议的 URL:
$url = 'http://www.example.com/etcetc';
if (preg_match("~^$regex$~i", $url)) {
echo 'Matched URL with protocol';
}
此模式应涵盖广泛的 URL 格式,同时还可以防止包含“/”等字符的潜在恶意输入。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3