2014-05-25 56 views
-2

我在查找驗證用戶提交的網址的代碼以確保它以.jpg.png.jpeg結尾,但我無法找到它。我想用preg_match()來完成。preg_match()for image我該怎麼做?

+1

可能重複[預浸\ _match的文件列表的擴展(http://stackoverflow.com/questions/10563796/preg-match- for-a-list-of-files-extension) – JakeGould

+0

這個問題還不錯。但是,你有沒有嘗試過或試圖做的任何代碼示例? – JakeGould

+0

@JakeGould不,我唯一擁有的是: $ image = $ _POST ['image']; 但這只是簡單的表單提交。 – user3368850

回答

3

你可以用的preg_match像這樣做:

if(preg_match('/\.(jpg|png|jpeg)$/', $url)) { 

} 

但是有過使用pathinfo()的另一種方式:

$extension = pathinfo($url, PATHINFO_EXTENSION); 
if (in_array($extension, array('jpg', 'png', 'jpeg'))) { 

} 

如果你想要一個更嚴格的驗證,那麼首先解析URL並從path部分獲得擴展名:

$parts = parse_url($url); 
$extension = pathinfo($parts['path'], PATHINFO_EXTENSION); 
if (in_array($extension, array('jpg', 'png', 'jpeg'))) { 

} 
+0

'pathinfo'絕對是一個更好的解決方案。但假設原始海報需要一個正則表達式是有原因的。 – JakeGould

+0

pathinfo()也很好,但我無法讓它工作。 如果我使用preg_match(),你可以提交這個image.exe?extension = .jpg,我不希望這樣。 – user3368850

+0

@ user3368850用更嚴格的驗證擴展我的答案,該驗證不允許使用'image.exe?extension = .jpg'。 –

1

假設您的網址是在變量$url這應該工作:

$url = 'https://www.google.com/images/srpr/logo11w.png'; 

$an_image = preg_match("/^.*\.(jpg|jpeg|png|gif)$/i", $url); 

if ($an_image) { 
    echo 'This is an image!'; 
}