Как проверить расширение файла изображения с регулярным выражением

Как проверить расширение файла изображения с помощью регулярного выражения

Шаблон регулярного выражения расширения файла изображения

([^\s]+(\.(?i)(jpg|png|gif|bmp))$)

Описание

(           #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

Вся комбинация означает, что в ней должна быть одна или несколько строк (но не пробел), за которыми следует точка "." и строка заканчивается на «jpg», «png», «gif» или «bmp», а расширенный файл не чувствителен к регистру.

Этот шаблон регулярного выражения широко используется для расширенной проверки различных файлов. Вы можете просто изменить конечную комбинацию(jpg|png|gif|bmp), чтобы получить другую проверку расширений файла, которая соответствует вашим потребностям.

Пример регулярного выражения Java

package com.example.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();

   }
}

Соответствующий файл изображения:

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»

Несоответствующее изображение:

1. «.Jpg», «.gif», «. Png», «. Bmp» - требуется имя файла изображения
2. ».Jpg», «.gif», «.png», «.bmp» - пробелы в первом символе
3 недопустимы. «A.txt», «a.exe», «a.», «A.mp3 ″ - разрешено только расширение файла изображения
3. «Jpg», «gif», «png», «bmp» - требуется расширение файла изображения.

Модульный тест - ImageValidator

package com.example.regex;

import org.testng.Assert;
import org.testng.annotations.*;

/**
 * Image validator Testing
 * @author example
 *
 */
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);
       }
    }
}

Модульный тест - результат

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.example.regex.ImageValidatorTest
    Tests run: 2, Failures: 0, Skips: 0
===============================================


===============================================
example
Total tests run: 2, Failures: 0, Skips: 0
===============================================

Хотите узнать больше о регулярных выражениях? Настоятельно рекомендую эту лучшую и классическую книгу - «Освоение регулярных выражений»

+
+
Related