Java 經常使用驗證方法(commons-validator,hutool)

背景

爲了實現接口響應全量字段斷言,開發斷言表達式框架時,除了調研經常使用的斷言框架以外,也調研了一些驗證框架和方法(非hibernate-validatorspring-validator驗證註解)。java

簡單學習下構建工具Gradle如何使用。正則表達式

commons-validator

A common issue when receiving data either electronically or from user input is verifying the integrity of the data. This work is repetitive and becomes even more complicated when different sets of validation rules need to be applied to the same set of data based on locale. Error messages may also vary by locale. This package addresses some of these issues to speed development and maintenance of validation rules.spring

Apache開源的通用驗證框架,目前最新版本1.7apache

hutool

A set of tools that keep Java sweet.微信

Hutool是一個小而全的Java工具類庫,經過靜態方法封裝,下降相關API的學習成本,提升工做效率,使Java擁有函數式語言般的優雅,讓Java語言也能夠「甜甜的」。app

Hutool 是項目中 「util」 包友好的替代,它節省了開發人員對項目中公用類和公用工具方法的封裝時間,使開發專一於業務,同時能夠最大限度的避免封裝不完善帶來的 bug。框架

驗證方法比較

僅僅從驗證方法比較:dom

  • commons-validator除了通用驗證方法外,還支持國際通用數字標準驗證,好比:IBAN (International Bank Account Number) ISSN(International Standard Serial Number) ISBN(International Standard Book Number)
  • hutool(Validator)通用驗證方法與commons-validator基本一致,因爲國人開源,驗證方法較「中國」化些,好比:身份證、手機號、車牌號、郵政編碼、社會統一信用代碼、是否漢字等。

PS:hutool做者問題交流和合並 PR 那是極快的。electron

驗證測試工程(基於Gradle)

Gradle 配置文件maven

plugins {
    id 'java'
}

group 'com.jlh'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.testng:testng:6.14.3'
    compile 'commons-validator:commons-validator:1.7'
    compile 'cn.hutool:hutool-all:5.4.0'
}

驗證方法使用演示

package com.jlh.validator;

import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.IdcardUtil;
import org.apache.commons.validator.GenericValidator;
import org.apache.commons.validator.routines.InetAddressValidator;
import org.testng.Assert;
import org.testng.annotations.Test;

import java.util.UUID;

/**
 * 驗證框架測試
 *
 * @Author:jiangliheng
 * @Date:2020/8/28 13:31
 */
public class ValidatorTest {

    /**
     * apache commons validator 使用演示
     */
    @Test
    public void commonsValidatorTest() {
        // null 或 空斷言
        Assert.assertTrue(GenericValidator.isBlankOrNull(""));
        Assert.assertTrue(GenericValidator.isBlankOrNull(null));
        // int,其餘類型同樣:byte,short,float,double,long
        Assert.assertTrue(GenericValidator.isInt("1"));
        // 日期
        Assert.assertTrue(GenericValidator.isDate("20200829", "yyyyMMdd",true));
        // int 在指定範圍內,其餘類型同樣:byte,short,float,double,long
        Assert.assertTrue(GenericValidator.isInRange(1, 0,2));
        // int 最大最小,其餘類型同樣:float,double,long
        Assert.assertTrue(GenericValidator.minValue(1, 1));
        Assert.assertTrue(GenericValidator.maxValue(1, 1));
        // 字符串 最大最小長度
        Assert.assertTrue(GenericValidator.maxLength("daodaotest", 10));
        Assert.assertTrue(GenericValidator.minLength("daodaotest", 10));
        // 正則表達式
        Assert.assertTrue(GenericValidator.matchRegexp("daodaotest", "^d.*t$"));
        // 信用卡驗證
        Assert.assertTrue(GenericValidator.isCreditCard("6227612145830440"));
        // url
        Assert.assertTrue(GenericValidator.isUrl("http://www.baidu.com"));
        // email
        Assert.assertTrue(GenericValidator.isEmail("dao@test.com"));
        // ip
        Assert.assertTrue(InetAddressValidator.getInstance().isValid("192.168.1.1"));
        Assert.assertTrue(InetAddressValidator.getInstance().isValid("CDCD:910A:2222:5498:8475:1111:3900:2020"));
    }

    /**
     * hutools validator 使用演示
     */
    @Test
    public void huTollsValidatorTest() {
        // null 空 布爾
        Assert.assertTrue(Validator.isNull(null));
        Assert.assertTrue(Validator.isNotNull("daodaotest"));
        Assert.assertTrue(Validator.isEmpty(""));
        Assert.assertTrue(Validator.isNotEmpty("daodaotest"));
        Assert.assertTrue(Validator.isTrue(true));
        Assert.assertTrue(Validator.isFalse(false));
        // 相等
        Assert.assertTrue(Validator.equal("daodaotest","daodaotest"));
        // 是否漢字,包含漢字
        Assert.assertTrue(Validator.hasChinese("daodaotest叨叨軟件測試"));
        Assert.assertTrue(Validator.isChinese("叨叨軟件測試"));
        // 是否爲數字
        Assert.assertTrue(Validator.isNumber("1.1"));
        // 是否字母,包括大寫和小寫字母
        Assert.assertTrue(Validator.isWord("daodaotest"));
        // 是否爲英文字母 、數字和下劃線, 還支持:大寫和小寫字母和漢字(isLetter)
        Assert.assertTrue(Validator.isGeneral("dao_1"));
        // 是否全爲大寫或小寫字母
        Assert.assertTrue(Validator.isLowerCase("daodaotest"));
        Assert.assertTrue(Validator.isUpperCase("DAODAOTEST"));
        // 檢查給定的數字是否在指定範圍內
        Assert.assertTrue(Validator.isBetween(1,1,1));
        // 生日
        Assert.assertTrue(Validator.isBirthday("20200830"));
        // 18位 身份證號格式校驗,已經提 PR,改成調用 IdcardUtil 的方法,估計5.4.1 版本更新
        Assert.assertTrue(Validator.isCitizenId("11010119900307299X"));
        // 身份證校驗,支持18位、15位和港澳臺的10位
        // 支持:10位(isValidCard10),15位(isValidCard15),18位(isValidCard18),香港(isValidHKCard),臺灣(isValidTWCard)
        Assert.assertTrue(IdcardUtil.isValidCard("11010119900307299X"));
        Assert.assertTrue(IdcardUtil.isValidCard18("11010119900307299X"));
        // 統一社會信用代碼(營業執照註冊號)
        Assert.assertTrue(Validator.isCreditCode("91350500676532779B"));
        // 中國車牌號
        Assert.assertTrue(Validator.isPlateNumber("京A88888"));
        // 郵編
        Assert.assertTrue(Validator.isZipCode("100000"));
        // uuid
        Assert.assertTrue(Validator.isUUID(UUID.randomUUID().toString()));
        // 正則表達式
        Assert.assertTrue(Validator.isMatchRegex("^d.*t$","daodaotest"));
        // 手機號
        Assert.assertTrue(Validator.isMobile("13888888888"));
        // url
        Assert.assertTrue(Validator.isUrl("http://www.baidu.com"));
        // email
        Assert.assertTrue(Validator.isEmail("dao@test.com"));
        // ip
        Assert.assertTrue(Validator.isIpv4("192.168.1.1"));
        Assert.assertTrue(Validator.isIpv6("CDCD:910A:2222:5498:8475:1111:3900:2020"));
    }

}

微信公衆號:daodaotest

相關文章
相關標籤/搜索