代码之家  ›  专栏  ›  技术社区  ›  Uffo

PHP url验证+检测

  •  0
  • Uffo  · 技术社区  · 14 年前

    如果用户输入: http://site.com 我需要移除 http:// site.com ,如果用户输入 http://www.site.com 我需要移除 http://www. www.site.com 我需要移除 www. 或者他也可以进去 网站.com 也会很好的。

    preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $_POST['link'])
    
    5 回复  |  直到 12 年前
        1
  •  2
  •   Andrew    14 年前

    我不认为我会使用regex来实现这个,因为你只是在检查字符串开头的内容。所以:

    $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);
    }
    

    你应该照顾好它。

        2
  •  3
  •   Aillyn    14 年前

    使用 filter_var() 相反。

    if (filter_var($_POST['link'], FILTER_VALIDATE_URL)) {
        // valid URL
    } else {
       // not valid
    }
    
        3
  •  3
  •   Martin    14 年前

    还有 parse_url 功能。

        4
  •  0
  •   Ascherer    14 年前

    我总是和你一起去,哈哈

    str_replace('http://','',str_replace('www.','',$url))
    
        5
  •  0
  •   Gus    14 年前

    我想你要找的是多阶段的 preg_replace() :

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

    这也大大简化了所需的regex。