我需要帮助创建一个匹配所有网址的正则表达式,例如,请不要将问题视为重复,因为我一直在寻找我需要的东西,而且我所看到的答案都没有给出答案解决了我的问题。
website.com
www.website.com
还有任何尾随
www.website.com/path-to-something
我正在编写缩短任何网址的内容,但要这样做,首先我需要将它们全部匹配。
由于
答案 0 :(得分:16)
这一个正确匹配您发布的所有内容:
preg_match_all('#[-a-zA-Z0-9@:%_\+.~\#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~\#?&//=]*)?#si', $targetString, $result);
答案 1 :(得分:5)
你想使用这样的东西:
$string = 'www.blah.com';
$temp_string = (!preg_match('#^(ht|f)tps?://#', $string)) // check if protocol not present
? 'http://' . $string // temporarily add one
: $string; // use current
if (filter_var($temp_string, FILTER_VALIDATE_URL))
{
echo 'is valid';
} else {
echo 'not valid';
}
这使用PHP的内置URL验证。它将首先检查协议是否存在,如果不存在,它将临时将一个协议添加到要检查的字符串,然后通过验证运行它。与目前接受的答案不同,这是准确的。
答案 2 :(得分:2)
您可以使用以下技巧:
$url = "your URL"
$validation = "/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i";
if((bool)preg_match($validation, $url) === false)
echo 'Not a valid URL';
我认为它可能适合你。
答案 3 :(得分:1)
不要使用正则表达式。有一个PHP功能可以做你想要的。