判断数字、网址、IP4、IP6、营业执照、车牌号等正则表达式

hutool java 文章 精帖 2022-08-31 14:26 683 0 全屏看文

AI助手支持GPT4.0

以下正则来自Java强大的工具类 Hutool,支持如下文字判断:

  1. 英文字母 、数字和下划线

  2. 数字、字母、汉字

  3. IP v4 ,IP v6

  4. 货币

  5. 邮件,符合RFC 5322规范

  6. 移动电话(中国大陆、中国香港、中国台湾、中国澳门)

  7. 座机号码

  8. 18位身份证号码

  9. 邮编,兼容港澳台

  10. 生日

  11. URL

  12. UUID

  13. MAC地址正则

  14. 16进制字符串

  15. 时间正则

  16. 中国车牌号码(兼容新能源车牌)

  17. 社会统一信用代码(营业执照)

  18. 车架号 别名:车辆识别代号 车辆识别码

  19. 驾驶证  别名:驾驶证档案编号、行驶证编号

package cn.hutool.core.lang;

/**
 * 常用正则表达式字符串池
 *
 * @author looly
 * @since 5.7.3
 */
public interface RegexPool {
	/**
	 * 英文字母 、数字和下划线
	 */
	String GENERAL = "^\\w+$";
	/**
	 * 数字
	 */
	String NUMBERS = "\\d+";
	/**
	 * 字母
	 */
	String WORD = "[a-zA-Z]+";
	/**
	 * 单个中文汉字<br>
	 * 参照维基百科汉字Unicode范围(https://zh.wikipedia.org/wiki/%E6%B1%89%E5%AD%97 页面右侧)
	 */
	String CHINESE = "[\u2E80-\u2EFF\u2F00-\u2FDF\u31C0-\u31EF\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF\uD840\uDC00-\uD869\uDEDF\uD869\uDF00-\uD86D\uDF3F\uD86D\uDF40-\uD86E\uDC1F\uD86E\uDC20-\uD873\uDEAF\uD87E\uDC00-\uD87E\uDE1F]";
	/**
	 * 中文汉字
	 */
	String CHINESES = CHINESE + "+";
	/**
	 * 分组
	 */
	String GROUP_VAR = "\\$(\\d+)";
	/**
	 * IP v4<br>
	 * 采用分组方式便于解析地址的每一个段
	 */
	//String IPV4 = "\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b";
	String IPV4 = "^(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)$";
	/**
	 * IP v6
	 */
	String IPV6 = "(([0-9a-fA-F]{1,4}:){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]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))";
	/**
	 * 货币
	 */
	String MONEY = "^(\\d+(?:\\.\\d+)?)$";
	/**
	 * 邮件,符合RFC 5322规范,正则来自:http://emailregex.com/
	 * What is the maximum length of a valid email address? https://stackoverflow.com/questions/386294/what-is-the-maximum-length-of-a-valid-email-address/44317754
	 * 注意email 要宽松一点。比如 jetz.chong@hutool.cn、jetz-chong@ hutool.cn、jetz_chong@hutool.cn、dazhi.duan@hutool.cn 宽松一点把,都算是正常的邮箱
	 */
	String EMAIL = "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?: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]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)])";
	/**
	 * 移动电话
	 */
	String MOBILE = "(?:0|86|\\+86)?1[3-9]\\d{9}";
	/**
	 * 中国香港移动电话
	 * eg: 中国香港: +852 5100 4810, 三位区域码+10位数字, 中国香港手机号码8位数
	 * eg: 中国大陆: +86  180 4953 1399,2位区域码标示+13位数字
	 * 中国大陆 +86 Mainland China
	 * 中国香港 +852 Hong Kong
	 * 中国澳门 +853 Macao
	 * 中国台湾 +886 Taiwan
	 */
	String MOBILE_HK = "(?:0|852|\\+852)?\\d{8}";
	/**
	 * 中国台湾移动电话
	 * eg: 中国台湾: +886 09 60 000000, 三位区域码+号码以数字09开头 + 8位数字, 中国台湾手机号码10位数
	 * 中国台湾 +886 Taiwan 国际域名缩写:TW
	 */
	String MOBILE_TW = "(?:0|886|\\+886)?(?:|-)09\\d{8}";
	/**
	 * 中国澳门移动电话
	 * eg: 中国台湾: +853 68 00000, 三位区域码 +号码以数字6开头 + 7位数字, 中国台湾手机号码8位数
	 * 中国澳门 +853 Macao 国际域名缩写:MO
	 */
	String MOBILE_MO = "(?:0|853|\\+853)?(?:|-)6\\d{7}";
	/**
	 * 座机号码<br>
	 * pr#387@Gitee
	 */
	String TEL = "(010|02\\d|0[3-9]\\d{2})-?(\\d{6,8})";
	/**
	 * 座机号码+400+800电话
	 *
	 * @see <a href="https://baike.baidu.com/item/800">800</a>
	 */
	String TEL_400_800 = "0\\d{2,3}[\\- ]?[1-9]\\d{6,7}|[48]00[\\- ]?[1-9]\\d{6}";
	/**
	 * 18位身份证号码
	 */
	String CITIZEN_ID = "[1-9]\\d{5}[1-2]\\d{3}((0\\d)|(1[0-2]))(([012]\\d)|3[0-1])\\d{3}(\\d|X|x)";
	/**
	 * 邮编,兼容港澳台
	 */
	String ZIP_CODE = "^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[0-7]|6[0-7]|7[0-5]|8[0-9]|9[0-8])\\d{4}|99907[78]$";
	/**
	 * 生日
	 */
	String BIRTHDAY = "^(\\d{2,4})([/\\-.年]?)(\\d{1,2})([/\\-.月]?)(\\d{1,2})日?$";
	/**
	 * URI<br>
	 * 定义见:https://www.ietf.org/rfc/rfc3986.html#appendix-B
	 */
	String URI = "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?";
	/**
	 * URL
	 */
	String URL = "[a-zA-Z]+://[\\w-+&@#/%?=~_|!:,.;]*[\\w-+&@#/%=~_|]";
	/**
	 * Http URL(来自:http://urlregex.com/)<br>
	 * 此正则同时支持FTP、File等协议的URL
	 */
	String URL_HTTP = "(https?|ftp|file)://[\\w-+&@#/%?=~_|!:,.;]*[\\w-+&@#/%=~_|]";
	/**
	 * 中文字、英文字母、数字和下划线
	 */
	String GENERAL_WITH_CHINESE = "^[\u4E00-\u9FFF\\w]+$";
	/**
	 * UUID
	 */
	String UUID = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$";
	/**
	 * 不带横线的UUID
	 */
	String UUID_SIMPLE = "^[0-9a-fA-F]{32}$";
	/**
	 * MAC地址正则
	 */
	String MAC_ADDRESS = "((?:[a-fA-F0-9]{1,2}[:-]){5}[a-fA-F0-9]{1,2})|0x(\\d{12}).+ETHER";
	/**
	 * 16进制字符串
	 */
	String HEX = "^[a-fA-F0-9]+$";
	/**
	 * 时间正则
	 */
	String TIME = "\\d{1,2}:\\d{1,2}(:\\d{1,2})?";
	/**
	 * 中国车牌号码(兼容新能源车牌)
	 */
	String PLATE_NUMBER =
			//https://gitee.com/loolly/hutool/issues/I1B77H?from=project-issue
			"^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[ABCDEFGHJK])|([ABCDEFGHJK]([A-HJ-NP-Z0-9])[0-9]{4})))|" +
					//https://gitee.com/loolly/hutool/issues/I1BJHE?from=project-issue
					"([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领]\\d{3}\\d{1,3}[领])|" +
					"([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$";

	/**
	 * 社会统一信用代码
	 * <pre>
	 * 第一部分:登记管理部门代码1位 (数字或大写英文字母)
	 * 第二部分:机构类别代码1位 (数字或大写英文字母)
	 * 第三部分:登记管理机关行政区划码6位 (数字)
	 * 第四部分:主体标识码(组织机构代码)9位 (数字或大写英文字母)
	 * 第五部分:校验码1位 (数字或大写英文字母)
	 * </pre>
	 */
	String CREDIT_CODE = "^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$";
	/**
	 * 车架号
	 * 别名:车辆识别代号 车辆识别码
	 * eg:LDC613P23A1305189
	 * eg:LSJA24U62JG269225
	 * 十七位码、车架号
	 * 车辆的唯一标示
	 */
	String CAR_VIN = "^[A-Za-z0-9]{17}$";
	/**
	 * 驾驶证  别名:驾驶证档案编号、行驶证编号
	 * eg:430101758218
	 * 12位数字字符串
	 * 仅限:中国驾驶证档案编号
	 */
	String CAR_DRIVING_LICENCE = "^[0-9]{12}$";
}


-EOF-

AI助手支持GPT4.0