package com.app.mvc.util; import java.util.regex.Pattern; import static com.google.common.base.Preconditions.checkArgument; /** * 系统中经常使用正则表达式工具,比如判断字符串是否含有中文, * 电话号码是否正确等等.因此改类封装了常用正则表达式 * Created by jimin on 16/3/10 */ public class RegexUtil { //pre-compile private static final Pattern isPostCode = Pattern.compile("[1-9]\\d(?!\\d)"); private static final Pattern isIPv4 = Pattern.compile("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)"); private static final Pattern isEmail = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*"); private static final Pattern isCEN_ = Pattern.compile("^[\\u4E00-\\u9FA5A-Za-z0-9_]+$"); private static final Pattern isCEN = Pattern.compile("^[\\u4E00-\\u9FA5A-Za-z0-9]+$"); private static final Pattern isEN_ = Pattern.compile("^\\w{3,20}$"); private static final Pattern isEN = Pattern.compile("^[A-Za-z0-9]+$"); private static final Pattern isTelephone = Pattern.compile("\\d{3}-\\d{8}|\\d{4}-\\d{7}"); private static final Pattern isMobile = Pattern.compile("^(0|86|17951)?(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$"); /** * 顾名思义,是否是中文char * * @param ch 单个字符 * @return true: 符合条件 false: 不复合条件 */ public static boolean isChinese(char ch) { Character.UnicodeBlock ub = Character.UnicodeBlock.of(ch); if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) { return true; } return false; } /** * 是否是正确的邮政编码 * * @param postcode 邮政编码 * @return true: 符合条件 false: 不复合条件 */ public static boolean isPostCode(String postcode) { checkArgument(!isNullOrBlank(postcode)); return isPostCode.matcher(postcode).matches(); } /** * 是否是点分十进制的ip v4地址 * * @param ip ip地址 * @return true: 符合条件 false: 不复合条件 */ public static boolean isIPv4(String ip) { checkArgument(!isNullOrBlank(ip)); return isIPv4.matcher(ip).matches(); } /** * 是否是email地址 * * @param email 电子邮箱 * @return true: 符合条件 false: 不复合条件 */ public static boolean isEmail(String email) { checkArgument(!isNullOrBlank(email)); return isEmail.matcher(email).matches(); } /** * 中文、英文、数字包括下划线 * * @param input * @return true: 符合条件 false: 不复合条件 */ public static boolean isCEN_(String input) { checkArgument(!isNullOrBlank(input)); return isCEN_.matcher(input).matches(); } /** * 中文、英文、数字但不包括下划线等符号 * * @param input 输入 * @return true: 符合条件 false: 不复合条件 */ public static boolean isCEN(String input) { checkArgument(!isNullOrBlank(input)); return isCEN.matcher(input).matches(); } /** * 由数字、26个英文字母或者下划线组成的字符串 * * @param input 输入 * @return true: 符合条件 false: 不复合条件 */ public static boolean isEN_(String input) { checkArgument(!isNullOrBlank(input)); return isEN_.matcher(input).matches(); } /** * 由数字和26个英文字母组成的字符串 * * @param input 输入 * @return true: 符合条件 false: 不复合条件 */ public static boolean isEN(String input) { checkArgument(!isNullOrBlank(input)); return isEN.matcher(input).matches(); } /** * 国内电话号码 * * @param telephone 国内电话 * @return true: 符合条件 false: 不复合条件 */ public static boolean isTelephone(String telephone) { checkArgument(!isNullOrBlank(telephone)); return isTelephone.matcher(telephone).matches(); } /** * 手机号码,判断86 | 0 |17951 的形式。 * * @param mobile 国内手机号 * @return true: 符合条件 false: 不复合条件 */ public static boolean isMobile(String mobile) { checkArgument(!isNullOrBlank(mobile)); return isMobile.matcher(mobile).matches(); } /** * 身份证号(15位、18位数字) * * @param icard 身份证号 * @return true: 符合条件 false: 不复合条件 */ public static boolean isIDCard(String icard) { checkArgument(!isNullOrBlank(icard)); return icard.matches("^\\d{15}|\\d{18}$"); } public static boolean isNullOrBlank(String string) { return string == null || string.isEmpty(); } }