SpringBoot - 实用工具类库common-util使用详解4(数据校验:ValidateUtil)
作者:hangge | 2020-04-21 08:10
四、数据校验工具类(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() 方法的验证结果刚好相反。
(2)isNotChinese() 方法验证字符串是否不完全是中文,和 isChinese() 方法的验证结果刚好相反。
(2)isLetter() 方法用于验证字符串是否是字母:
(3)isNumberLetter() 方法验证字符串是否是字母或者数字或者数字+字母,而 isNotNumberLetter() 方法的验证结果则与 isNumberLetter() 相反。
(2)isNotPhone() 方法用于验证字符串是否为非手机号,返回的结果 isPhone() 方法相反。
(2)isNotTelephone() 方法用于验证字符串是否不是固定电话,返回的结果 isTelephone() 方法相反。
(2)isNotIdCard() 方法用于验证输入的字符串是否不是身份证,返回的结果 isIdCard() 方法相反。
(2)isTimestamp() 方法用于验证输入的字符串时间戳格式是否正确,验证的日期格式必须是 yyyy-MM-dd HH:mm:ss,该方法可做到对闰年平年的 2 月精准验证。而 isNotTimestamp() 方法用于验证输入的字符串时间戳格式是否不是时间戳,检测结果和 isTimestamp() 相反。
(3)isYear() 方法用于验证输入的年的格式是否正确(范围必须是 1900 - 2099),而 isNotYear() 检测结果和 isYear() 相反。
(4)isTime() 方法用于验证输入的时间格式是否正确,而 isNotTime() 检测结果和 isTime() 相反。
(2)isNotUuid() 方法用于检测传入的参数是否是 uuid,和 isUuid() 检验结果相反:
(2)isNotIP() 方法用于检验字符串是否不是 ip,检验结果和 isIp() 方法相反。
(2)isNotDomain() 方法用于验证输入的字符串是否不是域名,检验结果和 isDomain() 方法相反。
(2)isNotUrl() 方法用于验证字符串是否不是 url,和 isUrl() 检验结果相反:
(2)isNotArmyIdCard() 用于判断非中国的军官证,和 isArmyIdCard() 检验结果相反:
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() 方法验证字符串是否是中国的手机号,涵盖 13、14、15、16、17、18、19 开头的手机号。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)