How to validate image file extension with regular expression
Image File Extension Regular Expression Pattern
([^\s]+(\.(?i)(jpg|png|gif|bmp))$)
Description
( #Start of the group #1
[^\s]+ # must contains one or more anything (except white space)
( # start of the group #2
\. # follow by a dot "."
(?i) # ignore the case sensive checking for the following characters
( # start of the group #3
jpg # contains characters "jpg"
| # ..or
png # contains characters "png"
| # ..or
gif # contains characters "gif"
| # ..or
bmp # contains characters "bmp"
) # end of the group #3
) # end of the group #2
$ # end of the string
) #end of the group #1
Whole combination is means, must have 1 or more strings (but not white space), follow by dot “.” and string end in “jpg” or “png” or “gif” or “bmp” , and the file extensive is case-insensitive.
This regular expression pattern is widely use in for different file extensive checking. You can just change the end combination (jpg|png|gif|bmp) to come out different file extension checking that suit your need.
Java Regular Expression Example
package com.mkyong.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ImageValidator{
private Pattern pattern;
private Matcher matcher;
private static final String IMAGE_PATTERN =
"([^\\s]+(\\.(?i)(jpg|png|gif|bmp))$)";
public ImageValidator(){
pattern = Pattern.compile(IMAGE_PATTERN);
}
/**
* Validate image with regular expression
* @param image image for validation
* @return true valid image, false invalid image
*/
public boolean validate(final String image){
matcher = pattern.matcher(image);
return matcher.matches();
}
}
Image file that match:
1. “a.jpg”, “a.gif”,”a.png”, “a.bmp”,
2. “..jpg”, “..gif”,”..png”, “..bmp”,
3. “a.JPG”, “a.GIF”,”a.PNG”, “a.BMP”,
4. “a.JpG”, “a.GiF”,”a.PnG”, “a.BmP”,
5. “jpg.jpg”, “gif.gif”,”png.png”, “bmp.bmp”
Image that doesn’t match:
1. “.jpg”, “.gif”,”.png”,”.bmp” – image file name is required
2. ” .jpg”, ” .gif”,” .png”,” .bmp” – White space is not allow in first character
3. “a.txt”, “a.exe”,”a.”,”a.mp3″ – Only image file extension is allow
3. “jpg”, “gif”,”png”,”bmp” – image file extension is required
Unit Test – ImageValidator
package com.mkyong.regex;
import org.testng.Assert;
import org.testng.annotations.*;
/**
* Image validator Testing
* @author mkyong
*
*/
public class ImageValidatorTest {
private ImageValidator imageValidator;
@BeforeClass
public void initData(){
imageValidator = new ImageValidator();
}
@DataProvider
public Object[][] ValidImageProvider() {
return new Object[][]{
{new String[] {
"a.jpg", "a.gif","a.png", "a.bmp",
"..jpg", "..gif","..png", "..bmp",
"a.JPG", "a.GIF","a.PNG", "a.BMP",
"a.JpG", "a.GiF","a.PnG", "a.BmP",
"jpg.jpg", "gif.gif","png.png", "bmp.bmp"
}
}
};
}
@DataProvider
public Object[][] InvalidImageProvider() {
return new Object[][]{
{new String[] {
".jpg", ".gif",".png",".bmp",
" .jpg", " .gif"," .png"," .bmp",
"a.txt", "a.exe","a.","a.mp3",
"jpg", "gif","png","bmp"
}
}
};
}
@Test(dataProvider = "ValidImageProvider")
public void ValidImageTest(String[] Image) {
for(String temp : Image){
boolean valid = imageValidator.validate(temp);
System.out.println("Image is valid : " + temp + " , " + valid);
Assert.assertEquals(true, valid);
}
}
@Test(dataProvider = "InvalidImageProvider",
dependsOnMethods="ValidImageTest")
public void InValidImageTest(String[] Image) {
for(String temp : Image){
boolean valid = imageValidator.validate(temp);
System.out.println("Image is valid : " + temp + " , " + valid);
Assert.assertEquals(false, valid);
}
}
}
Unit Test – Result
Image is valid : a.jpg , true
Image is valid : a.gif , true
Image is valid : a.png , true
Image is valid : a.bmp , true
Image is valid : ..jpg , true
Image is valid : ..gif , true
Image is valid : ..png , true
Image is valid : ..bmp , true
Image is valid : a.JPG , true
Image is valid : a.GIF , true
Image is valid : a.PNG , true
Image is valid : a.BMP , true
Image is valid : a.JpG , true
Image is valid : a.GiF , true
Image is valid : a.PnG , true
Image is valid : a.BmP , true
Image is valid : jpg.jpg , true
Image is valid : gif.gif , true
Image is valid : png.png , true
Image is valid : bmp.bmp , true
Image is valid : .jpg , false
Image is valid : .gif , false
Image is valid : .png , false
Image is valid : .bmp , false
Image is valid : .jpg , false
Image is valid : .gif , false
Image is valid : .png , false
Image is valid : .bmp , false
Image is valid : a.txt , false
Image is valid : a.exe , false
Image is valid : a. , false
Image is valid : a.mp3 , false
Image is valid : jpg , false
Image is valid : gif , false
Image is valid : png , false
Image is valid : bmp , false
PASSED: ValidImageTest([Ljava.lang.String;@1d4c61c)
PASSED: InValidImageTest([Ljava.lang.String;@116471f)
===============================================
com.mkyong.regex.ImageValidatorTest
Tests run: 2, Failures: 0, Skips: 0
===============================================
===============================================
mkyong
Total tests run: 2, Failures: 0, Skips: 0
===============================================
Want to learn more about regular expression? Highly recommend this best and classic book – “Mastering Regular Expression”
It doesn’t work if the filename contains spaces. For example: ‘test name.jpg’
This doesn’t account for query args in the url:
Should Pass:
test/test.jpg?blah=blah (doesn’t pass)
file.jpg
file.png
file.gif
test/file?test.jpg
Should NOT Pass:
test/jpg?blah=blah
test/test.html?blah=test.jpg (Passes)
test/test.jpg.mp3
file.jpg.mp3
file.mp3
Thank you for the informative post!
I like the multiline explanation of regexp: it would be useful a software that make it for every regexp
It won’t match for .jpeg extension. what changes needs to be done for matching either jpg or jpeg
hi all,
someone please help me to convert video(any format) to sequence of jpeg using java
thanks in advance
This pattern is working for me —–“(.*/)*.+\.(png|jpg|gif|bmp|jpeg|PNG|JPG|GIF|BMP)$”
JavaScript (doesn’t support closing (?-i) so not used):
((i?)(([w\(-_ )]{1,255})+(.)+(jpg|jpeg)))
NOTE: Used more parentheses than needed for clarity. Also isolates “-” (hyphen/minus) character so it doesn’t turn-off “\” or whatever it happen to trail. Proper ordering can also do this, but again, for clarity.
filename.jpg
path/path/filename.jpg
Non-match:
jpg
.jpg
gif
.gif
jpeg
.jpeg
Match:
x.jpeg
x-1.jpg
se-fsasff.jpg
sdfasf 123 dfsdf-0.jpg
CDC2020sdcs_CVS-DCS.jpeg
CDC_sd-cs1 9CVS_DCS.jpeg
2pathpath1n-_ame1.jpg
How to get file extension using RegEx in .net? I tried this but it wont give me file extension when I am in SharePoint Workflow’s RegEx which is supposed to honor .net regex.
Super, das habe ich gesucht.
Danke.
Great…
Hi
This looks good. Please also give me the regular expression for strings NOT HAVING bmp, png, jpg and gif extension.
Regards
Senthil
Wow, just… wow. You went amazingly in depth there, thank you! This is deserving of lots of shares!