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”



13 comments on “How to validate image file extension with regular expression

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

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

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

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

    Reply
  5. 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

    Reply
  6. 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.

    Reply
  7. 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

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

    Reply
  9. Hi

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

    Regards
    Senthil

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

    Reply

Leave a Comment

Your email address will not be published. Required fields are marked *