当前位置: > > > SpringBoot - 实用工具类库common-util使用详解4(数据校验:ValidateUtil)

SpringBoot - 实用工具类库common-util使用详解4(数据校验:ValidateUtil)

四、数据校验工具类(ValidateUtil)

1,基本介绍

ValidateUtil 工具类里面主要是封装了一些常用字段验证方法,首先其内部定义一些常用的正则表达式,具体如下:
//邮箱
public static final String EMAIL_PATTERN = "\\w+@\\w+\\.(com\\.cn)|\\w+@\\w+\\.(com|cn)";
//中文
public static final String CHINESE_PATTERN = "^[\u4e00-\u9fa5]{0,}$";
//数字和字母
public static final String NUMBER_ADN_LETTER = "^[A-Za-z0-9]+$";
//qq
public static final String QQ_PATTERN = "/[1-9][0-9]{4,}/";
//数字
public static final String NUMBER_PATTERN = "[0-9]+";
//字母
public static final String LETTER_PATTERN = "[a-zA-Z]+";
//邮编
public static final String ZIPCODE_PATTERN = "\\p{Digit}{6}";
//手机
public static final String PHONE_PATTERN = "^(13[0-9]|14[579]|15[^4,\\D]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$";
//固定电话
public static final String TELEPHONE_PATTERN = "^(0\\d{2,3}-)?(\\d{7,8})(-(\\d{3,}))?$";
//400固话
public static final String TELEPHONE_400_PATTERN = "((400)(\\d{7}))|((400)-(\\d{3})-(\\d{4}))";
//中国身份证
public static final String IDCARD_PATTERN = "^((11|12|13|14|15|21|22|23|31"
        + "|32|33|34|35|36|37|41|42|43|44|45|46|50|51|"
        + "52|53|54|61|62|63|64|65|71|81|82|91)\\d{4})"
        + "((((19|20)(([02468][048])|([13579][26]))0229))|"
        + "((20[0-9][0-9])|(19[0-9][0-9]))((((0[1-9])|(1[0-2]))"
        + "((0[1-9])|(1\\d)|(2[0-8])))|((((0[1,3-9])"
        + "|(1[0-2]))(29|30))|(((0[13578])|(1[02]))31))))"
        + "((\\d{3}(x|X))|(\\d{4}))$";
//用户名(3-15位,并且只能为数字或英文字符)
public static final String USERNAME_PATTERN = "^[A-Za-z0-9_]{3,15}$";
//密码
public static final String PASSWORD_PATTERN = "^(?![0-9]+$)[0-9A-Za-z]{6,20}$";
//uuid
public static final String UUID_PATTERN = "[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}";
//年
public static final String YEAR_PATTERN = "^(19|20)\\d{2}$";
//时间
public static final String TIME_PATTERN = "^(?:(?:([01]?\\d|2[0-3]):)?([0-5]?\\d):)?([0-5]?\\d)$";
//日期类型
public static final String DATE_PATTERN = "^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))";
//时间戳
public static final String TIME_STAMP_PATTERN = "^((\\d{2}(([02468][048])|([13579][26]))[\\-\\s]?((((0?[13578])|(1[02]))[\\-\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\s]?((((0?[13578])|(1[02]))[\\-\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\s]?((0?[1-9])|(1[0-9])|(2[0-8])))))) ([2][0-3]|[0-1][0-9]|[1-9]):[0-5][0-9]:([0-5][0-9]|[6][0])$";
//ip v4
public static final String IPV4_PATTERN = "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])";
//ip v6
public static final String IPV6_PATTERN = "([0-9a-f]+)\\:([0-9a-f]+)\\:([0-9a-f]+)\\:([0-9a-f]+)\\:([0-9a-f]+)\\:([0-9a-f]+)\\:([0-9a-f]+)\\:([0-9a-f]+)";
//url
public static final String URL_PATTERN = "^(http|https|ftp)\\://([a-zA-Z0-9\\.\\-]+(\\:[a-zA-Z0-9\\.&%\\$\\-]+)*@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\\-]+\\.)*[a-zA-Z0-9\\-]+\\.[a-zA-Z]{2,4})(\\:[0-9]+)?(/[^/][a-zA-Z0-9\\.\\,\\?\\'\\\\/\\+&%\\$#\\=~_\\-@]*)*$";
//域名
public static final String DOMAIN_PATTERN = "^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$";
//整数或者浮点数
public static final String INT_OR_FLOAT_PATTERN = "^\\d+\\.\\d+|\\d+$";
//浮点数
public static final String FLOAT_PATTERN = "^(-?\\d+)(\\.\\d+)?$";
//正整数
public static final String POSITIVE_INTEGER = "[1-9]+\\d{0,10}";
//军官证@since 0.3
public static final String ARMY_ID_CARD = "南字第(\\d{6,8})号|北字第(\\d{6,8})号|沈字第(\\d{6,8})号|兰字第(\\d{6,8})号|成字第(\\d{6,8})号|济字第(\\d{6,8})号|广字第(\\d{6,8})号|海字第(\\d{6,8})号|空字第(\\d{6,8})号|参字第(\\d{6,8})号|政字第(\\d{6,8})号|后字第(\\d{6,8})号|装字第(\\d{6,8})号";

2,邮箱格式验证

(1)isEmail() 方法用于验证输入的字符串是否是邮箱。
ValidateUtil.isEmail("123456@hangge.com"); // true
ValidateUtil.isEmail("123456"); // false

(2)isNotEmail() 方法用于验证字符串是否不是邮箱,和 isEmail() 方法的验证结果刚好相反。
ValidateUtil.isNotEmail("123456@hangge.com"); // false
ValidateUtil.isNotEmail("123456"); // true

3,是否是中文

(1)isChinese() 方法用于验证字符串是否完全是中文:
ValidateUtil.isChinese("欢迎访问"); // true
ValidateUtil.isChinese("欢迎访问hangge.com"); // false
ValidateUtil.isChinese("hangge.com"); // false

(2)isNotChinese() 方法验证字符串是否不完全是中文,和 isChinese() 方法的验证结果刚好相反。
ValidateUtil.isNotChinese("欢迎访问"); // false
ValidateUtil.isNotChinese("欢迎访问hangge.com"); // true
ValidateUtil.isNotChinese("hangge.com"); // true

4,是否是数字、字母

(1)isNumber() 方法用于验证字符串是否是数字。isNotNumber() 方法则验证字符串是否不是数字,它的结果与 isNumber() 方法相反。
// 是否是数字
ValidateUtil.isNumber("1234"); // false
ValidateUtil.isNumber("1234a"); // true

// 是否不是数字
ValidateUtil.isNotNumber("1234"); // false
ValidateUtil.isNotNumber("1234a"); // true

(2)isLetter() 方法用于验证字符串是否是字母:
ValidateUtil.isLetter("abc"); // true
ValidateUtil.isLetter("123abc"); // false

(3)isNumberLetter() 方法验证字符串是否是字母或者数字或者数字+字母,而 isNotNumberLetter() 方法的验证结果则与 isNumberLetter() 相反。
ValidateUtil.isNumberLetter("abc"); // true
ValidateUtil.isNumberLetter("123abc"); // true
ValidateUtil.isNumberLetter("123a..."); // false

ValidateUtil.isNotNumberLetter("abc"); // false
ValidateUtil.isNotNumberLetter("123abc"); // false
ValidateUtil.isNotNumberLetter("123a..."); // true

5,整数、浮点数验证

目前提供了如下几种常用的整数、浮点数的验证方法:
  • isPositiveInteger() 方法用于判断输入的字符是否是正整数。
  • isNonnegativeInteger() 方法用于验证输入的字符串是否不是负整数。
  • isFloat() 方法用于判断输入的字符串是否是浮点数。
  • isNotFloat() 方法用于判断输入的字符串是否不是浮点数。验证结果和 isFloat() 相反。
  • isPositiveFloat() 方法用于验证字符串是否是正浮点数。
  • isNegativeFloat() 方法用于验证字符串是否是负浮点数。
  • isNotNegativeFloat() 方法用于验证字符串是否不是负浮点数,验证结果和 isNegativeFloat() 相反。
  • isIntOrFloat() 方法用于验证字符串是否是整数或者是浮点数。
  • isNotIntOrFloat() 方法用于验证字符串是否不是整数或者不是浮点数。验证结果和 isIntOrFloat() 相反。
ValidateUtil.isNonnegativeInteger("11"); // true
ValidateUtil.isNonnegativeInteger("0"); // true
ValidateUtil.isNonnegativeInteger("-11"); // false

6,邮编验证

isZipCode() 方法用于验证字符串是否是中国的合法邮编:
ValidateUtil.isZipCode("430056");// true
ValidateUtil.isZipCode("12345678");// false

7,手机号验证

(1)isPhone() 方法验证字符串是否是中国的手机号,涵盖 13141516171819 开头的手机号。
ValidateUtil.isPhone("13510931498"); // true
ValidateUtil.isPhone("11510931498"); // false

(2)isNotPhone() 方法用于验证字符串是否为非手机号,返回的结果 isPhone() 方法相反。
ValidateUtil.isNotPhone("13510931498"); // false
ValidateUtil.isNotPhone("11510931498"); // true

8,固定电话验证

(1)isTelephone() 方法用于验证字符串是否为固定电话,包括普通固话和 400 固话。
ValidateUtil.isTelephone("010-86551122"); // true
ValidateUtil.isTelephone("400-8075-592"); // true
ValidateUtil.isTelephone("4008075592"); // true
ValidateUtil.isTelephone("5008075592"); // false

(2)isNotTelephone() 方法用于验证字符串是否不是固定电话,返回的结果 isTelephone() 方法相反。
ValidateUtil.isNotTelephone("010-86551122"); // false
ValidateUtil.isNotTelephone("400-8075-592"); // false
ValidateUtil.isNotTelephone("4008075592"); // false
ValidateUtil.isNotTelephone("5008075592"); // true

9,身份证验证

(1)isIdCard() 方法用于验证中国的居民身份证号(属于严格验证),是则返回 true,不是则返回 false
ValidateUtil.isIdCard("411722197508214014"); // true
ValidateUtil.isIdCard("111111111111111111"); // false

(2)isNotIdCard() 方法用于验证输入的字符串是否不是身份证,返回的结果 isIdCard() 方法相反。
ValidateUtil.isNotIdCard("411722197508214014"); // false
ValidateUtil.isNotIdCard("111111111111111111"); // true

10,日期时间验证

(1)isDate() 方法用于验证输入的字符串时间格式是否正确,验证的日期格式必须是 yyyy-MM-dd,该方法可做到对闰年平年的 2 月精准验证。而 isNotDate() 方法用于验证输入的字符串是否不是时间格式,和 isDate() 方法的检验结果相反。
ValidateUtil.isDate("2017-01-03"); // true
ValidateUtil.isDate("2017-01-32"); // false

ValidateUtil.isNotDate("2017-01-03"); // false
ValidateUtil.isNotDate("2017-01-32"); // true

(2)isTimestamp() 方法用于验证输入的字符串时间戳格式是否正确,验证的日期格式必须是 yyyy-MM-dd HH:mm:ss,该方法可做到对闰年平年的 2 月精准验证。而 isNotTimestamp() 方法用于验证输入的字符串时间戳格式是否不是时间戳,检测结果和 isTimestamp() 相反。
ValidateUtil.isTimestamp("2017-02-28 23:59:59"); // true
ValidateUtil.isTimestamp("2017-02-29 23:59:59"); // false

ValidateUtil.isNotTimestamp("2017-02-28 23:59:59"); // false
ValidateUtil.isNotTimestamp("2017-02-29 23:59:59"); // true

(3)isYear() 方法用于验证输入的年的格式是否正确(范围必须是 1900 2099),而 isNotYear() 检测结果和 isYear() 相反。
ValidateUtil.isYear("1922"); // true
ValidateUtil.isYear("1899"); // false

ValidateUtil.isNotYear("1922"); // false
ValidateUtil.isNotYear("1899"); // true

(4)isTime() 方法用于验证输入的时间格式是否正确,而 isNotTime() 检测结果和 isTime() 相反。
ValidateUtil.isTime("12:56:59"); // true
ValidateUtil.isTime("12:56:60"); // false

ValidateUtil.isNotTime("12:56:60"); // false
ValidateUtil.isNotTime("12:56:60"); // true

11,uuid 验证

(1)isUuid() 方法用于检测传入的参数是否是 uuid,正常情况是数据字母和"-"组成 36 为长度字符串,如果去掉"-"也必须保持有 32 位长度:
ValidateUtil.isUuid("de07884ca92c4e2696eab18313a46d99"); // true
ValidateUtil.isUuid("1241285e-f10d-486e-bd7c-a86e032828e1"); // true
ValidateUtil.isUuid("1241285e-f10d-486e-bd7c-a86e032828e1dd"); // false

(2)isNotUuid() 方法用于检测传入的参数是否是 uuid,和 isUuid() 检验结果相反:
ValidateUtil.isNotUuid("de07884ca92c4e2696eab18313a46d99"); // false
ValidateUtil.isNotUuid("1241285e-f10d-486e-bd7c-a86e032828e1"); // false
ValidateUtil.isNotUuid("1241285e-f10d-486e-bd7c-a86e032828e1dd"); // true

12,IP 地址验证

(1)isIP() 方法用于检测 ip 地址,包括 ipv4 ipv6
ValidateUtil.isIP("192.168.15.96"); // true
//ipv6可小写
ValidateUtil.isIP("ABCD:EF01:2345:6789:ABCD:EF01:2345:6789"); // true

(2)isNotIP() 方法用于检验字符串是否不是 ip,检验结果和 isIp() 方法相反。
ValidateUtil.isNotIP("aa"); // true
//ipv6可小写
ValidateUtil.isNotIP("hhkkejh"); // true

13,域名验证

(1)isDomain() 方法用于验证域名是否合法:
ValidateUtil.isDomain("www.hangge.com"); // true

(2)isNotDomain() 方法用于验证输入的字符串是否不是域名,检验结果和 isDomain() 方法相反。
ValidateUtil.isNotDomain("www.hangge.com"); // false

14,url 验证

(1)isUrl() 方法用于验证 url 是否合法,目前无法识别中文。
ValidateUtil.isUrl("https://www.baidu.com:8080/a/n?a=5"); // true
ValidateUtil.isUrl("https://192.168.15.96/a/n?a=5"); // true

(2)isNotUrl() 方法用于验证字符串是否不是 url,和 isUrl() 检验结果相反:
ValidateUtil.isNotUrl("https://www.baidu.com:8080/a/n?a=5"); // false
ValidateUtil.isNotUrl("https://192.168.15.96/a/n?a=5"); // false

15,非法字符验证

isContainsForbiddenCharacter() 方法用于判断输入的字符是否包含非法的字符,通常用于判断 xss sql 注入字符。
ValidateUtil.isContainsForbiddenCharacter("location.href"); // true
ValidateUtil.isContainsForbiddenCharacter("delete a"); // true

16,军官证验证

(1)isArmyIdCard() 用于判断中国的军官证:
ValidateUtil.isArmyIdCard("北字第7682126号"); // true
ValidateUtil.isArmyIdCard("美字第7682126号"); // false

(2)isNotArmyIdCard() 用于判断非中国的军官证,和 isArmyIdCard() 检验结果相反:
ValidateUtil.isNotArmyIdCard("北字第7682126号"); // false
ValidateUtil.isNotArmyIdCard("美字第7682126号"); // true
评论0