Using Regular Expressions to validate a filename in a FileUpload control

本文介绍了一种用于验证图片文件格式的有效正则表达式,包括jpg、png、gif和bmp等常见格式,并提供了Java实现示例及单元测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.

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


Example in Java:

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();

}
}

[color=blue]Image file that match:[/color]
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”

[color=blue]Image that doesn’t match:[/color]
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 kaiyang
*
*/
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:
[code="java"]
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
===============================================

[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值