验证相对 URL 的正则表达式



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

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

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

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

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

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

我不是正则表达式的忠实粉丝,所以我修复了 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/

只是从你列出的内容中获取它:

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

您可以考虑仅使用 urlencode 转义它,具体取决于情况。

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

 ^.*/[w.-]+$

最新更新