Main Tutorials

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”



About Author

author image
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.

Comments

Subscribe
Notify of
13 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
Kuikiker
11 years ago

It doesn’t work if the filename contains spaces. For example: ‘test name.jpg’

Justin Sternberg
10 years ago

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

simone
2 years ago

I like the multiline explanation of regexp: it would be useful a software that make it for every regexp

Barry
6 years ago

It won’t match for .jpeg extension. what changes needs to be done for matching either jpg or jpeg

sangeeth priya
9 years ago

hi all,
someone please help me to convert video(any format) to sequence of jpeg using java
thanks in advance

Navruzbek
9 years ago

This pattern is working for me —–“(.*/)*.+\.(png|jpg|gif|bmp|jpeg|PNG|JPG|GIF|BMP)$”

kurt lippisch
10 years ago

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

amber berg
10 years ago

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.

Evgeny
10 years ago

Super, das habe ich gesucht.

Danke.

Anil
11 years ago

Great…

senthil
11 years ago

Hi

This looks good. Please also give me the regular expression for strings NOT HAVING bmp, png, jpg and gif extension.

Regards
Senthil

Allan Schepis
11 years ago

Wow, just… wow. You went amazingly in depth there, thank you! This is deserving of lots of shares!

Dan
12 years ago

Thank you for the informative post!