2012-12-16 51 views
0

如何驗證字符串以檢查URL是否安全。文件名中沒有空格或特殊字符,可能會破壞gmail中的URL。驗證相對URL的正則表達式

如:data/Logo - free.png將是無效的

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

有數百個問題在這裏上驗證網址,但他們似乎都檢查它是否包含「HTTP」我不需要。

與工作代碼(從@minitech)更新:

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

它並不需要檢查,如果該URL存在,只是檢查有沒有空格或特殊字符 –

+0

[什麼 - 是最最好的正則表達式來檢查,如果-A-字符串是一個有效的URL] [1] [1]:http://stackoverflow.com/questions/161738/what-is-best-regular-expression-to-check-if-a-string-is-a-valid-url – FLF

回答

1

只是把它直接從你列出的東西:

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

你可能會考慮只是它使用urlencode,視情況而定逃逸。

+0

你缺少量詞 – Anirudha

+0

@ Some1.Kill.The.DJ:不,我正在倒轉比賽。 valid = does * not *包含* not *'\ w','''或'-'的事物。 – Ryan

+0

這每次都會返回true –

0

使用此正則表達式來檢查有效的文件名

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

無結尾分隔符'/' –

+0

您錯過了一個起始錨點。 – Ryan

+0

@minitech不需要它..只需檢查文件名末尾 – Anirudha

2

我不是正則表達式的大風扇,所以我固定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/