PHP url验证+检测

时间:2010-09-29 23:30:50

标签: php regex preg-match

所以这就是我需要做的事情。

如果用户输入了此内容:http://site.com我需要删除http://,以便字符串为site.com,如果用户输入http://www.site.com我需要删除http://www.或者如果用户输入www.site.com我需要删除www.,或者他也可以输入site.com它也会很好。

我在这里有一个功能,但是我的工作方式不合适,而且我在正则表达式上很糟糕。

preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $_POST['link'])

5 个答案:

答案 0 :(得分:3)

改为使用filter_var()

if (filter_var($_POST['link'], FILTER_VALIDATE_URL)) {
    // valid URL
} else {
   // not valid
}

答案 1 :(得分:3)

还有parse_url功能。

答案 2 :(得分:2)

我认为我不会使用正则表达式,因为你只是在检查字符串开头的内容。所以:

$link = $_POST['link'];
if (stripos($link, 'http://') === 0)
{
    $link = substr($link, 7);
}
elseif (stripos($link, 'https://') === 0)
{
    $link = substr($link, 8);
}
if (stripos($link, 'www.') === 0)
{
    $link = substr($link, 4);
}

应该照顾它。

答案 3 :(得分:0)

我总是和str_replace一起去哈哈

str_replace('http://','',str_replace('www.','',$url))

答案 4 :(得分:0)

我认为您正在寻找的是一个多阶段的preg_replace()

$tmp = strtolower($_POST['link']) ;
$tmp = preg_replace('/^http(s)?/', '', $tmp);
$domain = preg_replace('/^www./', '', $tmp) ;

这也简化了所需的正则表达式。