package cn.timer.api.config.enums; import java.util.regex.Matcher; import java.util.regex.Pattern; import lombok.Getter; /** * @date 2020年4月15日 * @author 翁东州 * @scene 使用场景:字符串的正则验证 */ @Getter public enum Regular { /** * 不超过20字符 */ CHARS20("CHARS20","(\\s|\\S){0,20}"), /** * 不超过500字符 */ CHARS500("CHARS500","(\\s|\\S){0,500}"), /** * 手机号码 */ PHONE("PHONE","^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\\d{8}$"), /** * 身份证 */ IDCARD("IDCARD","(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)"), /** * 账号是否合法 */ TOFZHANHAO("TOFZHANHAO","^[a-zA-Z][a-zA-Z0-9_]{4,15}$"), /** * 密码是否合法 */ TOFPW("TOFPW","^[a-zA-Z]\\w{5,17}$"), /** * 强密码 */ SHPW("SHPW","^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$"), /** * 纯汉字输入 */ CHINESE("CHINESE","[\\u4E00-\\u9FA5]*"), /** * 邮箱 */ EMAIL("EMAIL","^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"), /** * 域名 */ DNS("DNS","[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\\.?"), /** * 非负整数 */ FUNUM("FUNUM","^(0|[1-9][0-9]*)$"), /** * xml文件命名 */ XML("XML","^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.(xml|XML|Xml)$"), /** * QQ */ QQ("QQ","[1-9][0-9]{4,}"), /** * 邮政 */ YOUZHEN("YOUZHEN","[1-9]\\d{5}(?!\\d)"), /** * IP */ IPADDRESS("IPADDRESS","\\d+\\.\\d+\\.\\d+\\.\\d+"), /** * IP255.255.255.255 */ IP255("IP255","((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))"), /** * IP-V4 */ IPV4("IPV4","\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b"), /** * IP-V6 */ IPV6("IPV6","(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))"), /** * 子网掩码 */ SUBM("SUBM","((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))"), /** * yyyy-mm-dd 平闰年校验 */ YMD("YMD","^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$"), /** * 身份证校验码看isIdCard */ IDSTRING("IDSTRING","(^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}$)"); private String name; private String regex; Regular(String name,String regex) { this.name = name; this.regex = regex; } /** * @return true/false * @input 需要验证的字符串 * @regular 需要验证的枚举类型 */ public static boolean match(String input,Regular regular) { String regex = regular.getRegex(); Pattern p = Pattern.compile(regex); Matcher m = p.matcher(input); boolean tof = m.matches(); return tof; } }