回顧過往,讓讓咱們一塊兒考古Apache Commons Validator

宋軼~8.png

1、概述

  在基於B/S架構實現的Web應用系統開發實現中,爲了可以得到正確和有效的用戶表單請求的參數值,在進行業務處理以前都須要對接收的表單數據進行檢查和驗證。有時編程花的時間最多的就是考慮各類異常狀況帶來的問題,反而正常的功能很快就能夠開發完,參數非法校驗是一個普通不能再普通的需求了,若是不對請求參數校驗,假如參數隨便傳遞,那可能會帶來一系列問題。
爲了簡化開發人員的服務器端程序驗證的代碼,實現和減小對通用驗證邏輯的代碼實現工做,在Commons組件集中還提供有一個Commons-Validator數據驗證器組件,幫助開發人員實現通用驗證邏輯的程序代碼編程實現,避免重複地編程實現通用驗證邏輯的程序代碼——好比驗證Email字符串、日期字符串等是否知足合法的格式要求。java

  • org.apache.commons.validator
    • Validator 包提供基於 xml 文件的 JavaBean 驗證
  • org.apache.commons.validator.routines
    • 包含獨立的驗證器
  • org.apache.commons.validator.util
    • 包含 Commons Validator 使用的實用程序類

2、validator 包

2.1 GenericValidator

  該類主要完成通用的數據驗證邏輯——如數據是否爲空、數據的長度是否知足要求、是否爲某種類型的數據值、輸入的數據值的範圍等。而這些驗證功能都是經過GenericValidator類中的各類靜態成員方法實現的。在 GenericValidator 類中提供有以下的幾個主要的成員方法:正則表達式

方法 說明
boolean isBlankOrNull(String value) 驗證是否爲空或者null 對象
boolean isCreditCard(String value) 信用卡驗證
boolean isDate(String value, Locale locale) 驗證是否爲符合日期格式的輸入
boolean isDouble(String value) 是否能夠轉成 double
boolean isEmail(String value) 驗證是否爲合法的Email
boolean isFloat(String value) 是否能夠轉成 float
boolean isInRange(int value, int min, int max) 驗證輸入的數據值是否在某個特定的範圍以內
boolean isInt(String value) 是否能夠轉成 int
boolean isLong(String value) 是否能夠轉成 long
boolean isShort(String value) 是否能夠轉成 short
boolean isUrl(String value) 是否URL格式
boolean matchRegexp(String value, String regexp 是否對應正則匹配的規則
boolean maxLength(String value, int max) 是否爲最大長度
boolean maxValue(int value, int max) 是否爲最大值
boolean minLength(String value, int min) 是否爲最小長度
boolean minValue(int value, int min) 是否爲最小值
@Test
public void CommonsValidatorTest() {
   // null 或 空
   System.out.println(GenericValidator.isBlankOrNull(""));
   System.out.println(GenericValidator.isBlankOrNull(null));

   // int,其餘類型同樣:byte,short,float,double,long
   System.out.println(GenericValidator.isInt("1"));

   // 日期
   System.out.println(GenericValidator.isDate("20200829", "yyyyMMdd", true));

   // int 在指定範圍內,其餘類型同樣:byte,short,float,double,long
   System.out.println(GenericValidator.isInRange(1, 0, 2));

   // int 最大最小,其餘類型同樣:float,double,long
   System.out.println(GenericValidator.minValue(1, 1));
   System.out.println(GenericValidator.maxValue(1, 1));

   // 字符串 最大最小長度
   System.out.println(GenericValidator.maxLength("daodaotest", 10));
   System.out.println(GenericValidator.minLength("daodaotest", 10));

   // 正則表達式
   System.out.println(GenericValidator.matchRegexp("daodaotest", "^d.*t$"));

   // 信用卡驗證
   System.out.println(GenericValidator.isCreditCard("6227612145830440"));

   // url
   System.out.println(GenericValidator.isUrl("http://www.baidu.com"));

   // email
   System.out.println(GenericValidator.isEmail("dao@test.com"));
}
複製代碼

3、validator.routines 包

3.1 CalendarValidator

日曆驗證器apache

方法 說明
CalendarValidator getInstance() 獲取 CalendarValidator 類的對象實例
int compareDates(Calendar value, Calendar compare) 比較兩個日曆的日、月和年。
 相等返回 0、小於返回-一、大於返回 +1
int compareMonths(Calendar value, Calendar compare) 比較兩個日曆的月份和年份。
 相等返回 0、小於返回-一、大於返回 +1
int compareQuarters(Calendar value, Calendar compare) 比較兩個日曆的季度和年份。
 相等返回 0、小於返回-一、大於返回 +1
int compareWeeks(Calendar value, Calendar compare) 比較兩個日曆的周和年。
 相等返回 0、小於返回-一、大於返回 +1
int compareYears(Calendar value, Calendar compare) 比較兩個日曆的年份。
 相等返回 0、小於返回-一、大於返回 +1
@Test
public void testCalendarValidator() {
	CalendarValidator calendarValidator = CalendarValidator.getInstance();
	Calendar calendar=Calendar.getInstance();
	calendar.add(Calendar.YEAR,1);
	System.out.println(calendarValidator.compareDates(calendar, Calendar.getInstance()));
	System.out.println(calendarValidator.compareMonths(calendar, Calendar.getInstance()));
	System.out.println(calendarValidator.compareQuarters(calendar, Calendar.getInstance()));
	System.out.println(calendarValidator.compareWeeks(calendar, Calendar.getInstance()));
	System.out.println(calendarValidator.compareYears(calendar, Calendar.getInstance()));
}
複製代碼

3.2 CreditCardValidator

信用卡校驗編程

方法 說明
CreditCardValidator() 獲取 CreditCardValidator 類的對象實例
boolean isValid(String card) 判斷該字段是不是有效的信用卡號
Object validate(String card) 判斷該字段是不是有效的信用卡號
@Test
public void testCreditCardValidator() {
	CreditCardValidator creditCardValidator = new CreditCardValidator();
	System.out.println(creditCardValidator.isValid("6227612145830440"));
	System.out.println(creditCardValidator.validate("6227612"));
}
複製代碼

3.3 DateValidator

  這個類主要是用來檢查日期類型的輸入數據是否合法,日期的類型要經過參數傳遞給這個Validator。實際上,這個日期檢查就是經過formatter.parse(value)方法檢查時候有異常拋出。在 DateValidator 類中提供有以下的幾個主要的成員方法:數組

方法 說明
DateValidator getInstance() 獲取 DateValidator 類的對象實例
int compareDates(Date value,Date compare,TimeZone timeZone) 比較兩個日期的日、月和年。
 相等返回 0、小於返回-一、大於返回 +1
int compareMonths(Date value,Date compare,TimeZone timeZone) 比較兩個日期的月份和年份。
 相等返回 0、小於返回-一、大於返回 +1
int compareQuarters(Date value,Date compare,TimeZone timeZone) 比較兩個日期的季度和年份。
 相等返回 0、小於返回-一、大於返回 +1
int compareWeeks(Date value,Date compare,TimeZone timeZone) 比較兩個日期的周和年。
 相等返回 0、小於返回-一、大於返回 +1
int compareYears(Date value,Date compare,TimeZone timeZone) 比較兩個日期的年份。
 相等返回 0、小於返回-一、大於返回 +1
boolean isValid(String value,Locale locale) 按照Locale參數驗證輸入的日期數據是否合法
boolean isValid(String value, String pattern) 按照pattern驗證輸入的日期是否合法
boolean isValid(String value, String pattern, Locale locale)
@Test
public void testDateValidator() {
	DateValidator dateValidator = DateValidator.getInstance();
	String pattern = "yyyy-MM-dd";
     // 驗證
	System.out.println(dateValidator.isValid("2021-07-22", pattern));
    // 驗證/轉換日期,不符合格式則返回空
	System.out.println(dateValidator.validate("2021-07-22", pattern));

	Date date = Date.from(LocalDate.now().plusMonths(1).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
	System.out.println(dateValidator.compareDates(new Date(), date,null));
	System.out.println(dateValidator.compareMonths(new Date(), date,null));
	System.out.println(dateValidator.compareQuarters(new Date(), date,null));
	System.out.println(dateValidator.compareWeeks(new Date(), date,null));
	System.out.println(dateValidator.compareYears(new Date(), date,null));
}
複製代碼

3.4 DomainValidator

域名驗證器服務器

方法 說明
DomainValidator getInstance() 獲取 DomainValidator 類的對象實例
DomainValidator getInstance(boolean allowLocal) 獲取 DomainValidator 類的對象實例,並根據須要進行本地驗證
boolean isValid(String domain) 判斷是不是有效域名
@Test
public void testDomainValidator() {
	DomainValidator domainValidator = DomainValidator.getInstance();
	System.out.println(domainValidator.isValid("commons.apache.org"));
	System.out.println(domainValidator.isValid("https://commons.apache.org"));
	System.out.println(domainValidator.isValid("commons.apache.org/"));
}
複製代碼

3.4 EmailValidator

這個類用來檢查Email類型的輸入數據是否合法。在 EmailValidator 類中提供有以下的幾個主要的成員方法:markdown

方法 說明
EmailValidator getInstance() 獲取EmailValidator 類的對象實例
boolean isValid(String email) 驗證是不是有效的電子郵件地址
@Test
public void testEmailValidator() {
	EmailValidator emailValidator = EmailValidator.getInstance();
	System.out.println(emailValidator.isValid("duleilewuhen@sina.com"));
}
複製代碼

3.6 InetAddressValidator

Inet地址驗證器架構

方法 說明
InetAddressValidator getInstance() 獲取 InetAddressValidatorr 類的對象實例
boolean isValid(String inetAddress) 判斷指定的字符串是不是有效的 IP 地址
boolean isValidInet4Address(String inet4Address) 驗證 IPv4 地址
boolean isValidInet6Address(String inet6Address) 驗證 IPv6 地址
@Test
public void testInetAddressValidator() {
	InetAddressValidator inetAddressValidator = InetAddressValidator.getInstance();
	System.out.println(inetAddressValidator.isValid("192.168.1.1"));
	System.out.println(inetAddressValidator.isValid("CDCD:910A:2222:5498:8475:1111:3900:2020"));
	System.out.println(inetAddressValidator.isValidInet4Address("192.168.1.1"));
	System.out.println(inetAddressValidator.isValidInet6Address("fe80::ecea:feaf:cc50:7439%13"));
}
複製代碼

3.7 PercentValidator

百分比驗證器dom

方法 說明
PercentValidator getInstance() 獲取 PercentValidator 類的對象實例

3.8 RegexValidator

正則表達式驗證器url

方法 說明
RegexValidator(String regex,boolean caseSensitive) 獲取 RegexValidator 類的對象實例
RegexValidator(String[] regex,boolean caseSensitive) 獲取 RegexValidator 類的對象實例
@Test
public void testRegexValidator() {
	// 設置參數
	String regex1 = "^([A-Z]*)(?:\\-)([A-Z]*)*$";
	String regex2 = "^([A-Z]*)$";
	// 建立驗證
	RegexValidator validator02 = new RegexValidator(new String[]{regex1, regex2}, false);
	// 驗證返回boolean
	System.out.println("valid: " + validator02.isValid("abc-def"));
	// 驗證返回字符串
	System.out.println("result: " + validator02.validate("abc-def"));
	// 驗證返回數組
	System.out.println(String.join("**", validator02.match("abc-def")));
}
複製代碼

3.9 TimeValidator

時間驗證器

方法 說明
TimeValidator getInstance() 獲取 TimeValidator 類的對象實例
int compareHours(Calendar value, Calendar compare) 比較兩次的小時數。
 相等返回 0、小於返回-一、大於返回 +1
int compareMinutes(Calendar value, Calendar compare) 將小時和分鐘進行兩次比較。
 相等返回 0、小於返回-一、大於返回 +1
int compareSeconds(Calendar value, Calendar compare) 比較兩個時間的小時、分鐘和秒。
 相等返回 0、小於返回-一、大於返回 +1
int compareTime(Calendar value, Calendar compare) 比較兩個日曆的小時、分鐘、秒和毫秒。
 相等返回 0、小於返回-一、大於返回 +1
@Test
public void testTimeValidator() {
   TimeValidator timeValidator = TimeValidator.getInstance();
   LocalDateTime localDateTime = LocalDateTime.now().minusHours(12);
   Calendar localDateTimeCalendar = GregorianCalendar.from(ZonedDateTime.of(localDateTime, ZoneId.systemDefault()));
   System.out.println(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
   
   System.out.println(timeValidator.compareHours(localDateTimeCalendar, Calendar.getInstance()));
   System.out.println(timeValidator.compareMinutes(localDateTimeCalendar, Calendar.getInstance()));
   System.out.println(timeValidator.compareSeconds(localDateTimeCalendar, Calendar.getInstance()));
   System.out.println(timeValidator.compareTime(localDateTimeCalendar, Calendar.getInstance()));
}
複製代碼

3.10 UrlValidator

對URL地址進行有效驗證。在 UrlValidator 類中提供有以下的幾個主要的成員方法:

方法 說明
UrlValidator getInstance() 獲取 UrlValidator 類的對象實例
boolean isValid(String value) 判斷是否具備有效的 url 地址
@Test
public void testUrlValidator() {
   UrlValidator urlValidator = UrlValidator.getInstance();
   System.out.println(urlValidator.isValid("https://commons.apache.org/"));
   System.out.println(urlValidator.isValid("https://commons.apache.org"));
   System.out.println(urlValidator.isValid("commons.apache.org/"));
   System.out.println(urlValidator.isValid("commons.apache.org"));
}
複製代碼

4、validator.util

4.1 ValidatorUtils

方法 說明
String replace(String value, String key, String replaceValue) 將字符串中某個特性的字符串替換爲另外一個字符串
String getValueAsString(Object bean, String property) 獲取某個Bean中的一個特定的屬性,而後把屬性值轉換爲字符串返回。
Map<String, Object> copyMap(Map<String, Object> map) 對一個特定的FashHashMap執行copy
相關文章
相關標籤/搜索