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 the Author

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

Comments

Leave a Reply

avatar
newest oldest most voted
trackback
10 Java Regular Expression Examples You Should Know | Regular Expressions

[…] ==> See the explanation and example here […]

Barry
Guest
Barry

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

sangeeth priya
Guest
sangeeth priya

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

Navruzbek
Guest
Navruzbek

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

kurt lippisch
Guest
kurt lippisch

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
Guest
amber berg

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.

Justin Sternberg
Guest
Justin Sternberg

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

Evgeny
Guest
Evgeny

Super, das habe ich gesucht.

Danke.

Anil
Guest
Anil

Great…

Kuikiker
Guest
Kuikiker

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

senthil
Guest
senthil

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
Guest
Allan Schepis

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

trackback
Bits And Pix » RegEx: Match filename with extension

[…] Very good explanation of this regex here […]

Dan
Guest
Dan

Thank you for the informative post!