正则表达式,用于验证相对URL

时间:2012-12-16 16:56:14

标签: php regex

如何验证字符串以检查URL是否安全。文件名中没有空格或特殊字符可能会破坏gmail中的URL。

例如:data/Logo - free.png无效

我只想:"a-z", "0-9", ".", "-", "_"

这里有数百个验证URL的问题,但它们似乎都检查它是否包含我不需要的“http”。

使用工作代码更新(来自@minitech):

// validate filename
if (preg_match('/[^\w.-]/', basename($logo))){
    $error = true
}

3 个答案:

答案 0 :(得分:4)

我不是正则表达式的忠实粉丝因此我修复了PHP的内部filter_var,它似乎与相对URL有问题。我使用此解决方法:

function isValid($url)
{
    if (parse_url($url, PHP_URL_SCHEME) != '') {
        // URL has http/https/...
        return !(filter_var($url, FILTER_VALIDATE_URL) === false);
    }else{
        // PHP filter_var does not support relative urls, so we simulate a full URL
        // Feel free to replace example.com with any other URL, it won't matter!
        return !(filter_var('http://www.example.com/'.ltrim($url,'/'), FILTER_VALIDATE_URL) === false);
    }
}

PS:注意filter_var中的安全问题:https://d-mueller.de/blog/why-url-validation-with-filter_var-might-not-be-a-good-idea/

答案 1 :(得分:1)

从你列出的内容中取出正确的内容:

$valid = !preg_match('/[^\w.-]/', $name);

根据具体情况,您可以考虑使用urlencode转义它。

答案 2 :(得分:0)

使用此正则表达式检查有效文件名

 ^.*/[\w.-]+$