12

我需要帮助创建一个匹配所有网址的正则表达式,例如,请不要关闭问题作为重复项,因为我一直在寻找我需要的东西很长时间,而且我看到的答案都没有给出解决的答案我的问题。

网站.com

www.website.com

http://www.website.com

http://website.com

https://www.website.com

https://website.com

也有任何尾随

www.website.com/path-to-something

我正在编写一些可以缩短任何 url 的代码,但要这样做,首先我需要将它们全部匹配。

谢谢

4

4 回答 4

21

这一项与您发布的所有内容正确匹配:

preg_match_all('#[-a-zA-Z0-9@:%_\+.~\#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~\#?&//=]*)?#si', $targetString, $result);
于 2013-05-10T11:54:33.670 回答
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 验证。它将首先检查是否存在协议,如果不存在,它将临时将一个添加到要检查的字符串中,然后通过验证运行它。与当前接受的答案不同,这是准确的。

于 2013-05-10T17:18:47.127 回答
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';

我认为它可能对你有用。

于 2013-05-10T12:05:33.430 回答
-1

不要使用正则表达式。有一个 PHP 函数可以做你想做的事。

http://php.net/manual/en/function.parse-url.php

于 2013-05-10T21:16:35.973 回答