Created
May 29, 2018 08:26
-
-
Save wangshuai1992/fc2b46ea664aa98db631581a935d27c1 to your computer and use it in GitHub Desktop.
RegexExtUtil.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.regex.Matcher; | |
import java.util.regex.Pattern; | |
/** | |
* 正则工具类 | |
*/ | |
public class RegexExtUtil { | |
private static Pattern PATTERN_TEL = Pattern.compile("([0-9]+(\\-){0,1})+[0-9]$"); | |
/** | |
* 整数 | |
*/ | |
private static final String V_INTEGER = "^-?[1-9]\\d*$"; | |
/** | |
* 正整数 | |
*/ | |
private static final String V_Z_INDEX = "^[1-9]\\d*$"; | |
/** | |
* 负整数 | |
*/ | |
private static final String V_NEGATIVE_INTEGER = "^-[1-9]\\d*$"; | |
/** | |
* 数字 | |
*/ | |
private static final String V_NUMBER = "^([+-]?)\\d*\\.?\\d+$"; | |
/** | |
* 正数 | |
*/ | |
private static final String V_POSITIVE_NUMBER = "^[1-9]\\d*|0$"; | |
/** | |
* 负数 | |
*/ | |
private static final String V_NEGATINE_NUMBER = "^-[1-9]\\d*|0$"; | |
/** | |
* 浮点数 | |
*/ | |
private static final String V_FLOAT = "^([+-]?)\\d*\\.\\d+$"; | |
/** | |
* 正浮点数 | |
*/ | |
private static final String V_POSTTIVE_FLOAT = "^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*$"; | |
/** | |
* 负浮点数 | |
*/ | |
private static final String V_NEGATIVE_FLOAT = "^-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*)$"; | |
/** | |
* 非负浮点数(正浮点数 + 0) | |
*/ | |
private static final String V_UNNEGATIVE_FLOAT = "^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0$"; | |
/** | |
* 非正浮点数(负浮点数 + 0) | |
*/ | |
private static final String V_UNPOSITIVE_FLOAT = "^(-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*))|0?.0+|0$"; | |
/** | |
* 邮件 | |
*/ | |
private static final String V_EMAIL = "^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$"; | |
/** | |
* 颜色 | |
*/ | |
private static final String V_COLOR = "^[a-fA-F0-9]{6}$"; | |
/** | |
* url | |
*/ | |
private static final String V_URL = "^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$"; | |
/** | |
* 仅中文 | |
*/ | |
private static final String V_CHINESE = "^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$"; | |
/** | |
* 仅中文+. | |
*/ | |
private static final String V_CHINESEA_AND_DOT = "^[\u4E00-\u9FA5]{2,10}(?:·[\u4E00-\u9FA5]{2,5})*$"; | |
/** | |
* 仅ACSII字符 | |
*/ | |
private static final String V_ASCII = "^[\\x00-\\xFF]+$"; | |
/** | |
* 邮编 | |
*/ | |
private static final String V_ZIPCODE = "^\\d{6}$"; | |
/** | |
* 手机 | |
*/ | |
private static final String V_MOBILE = "^(1)[0-9]{10}$"; | |
/** | |
* ip地址 | |
*/ | |
private static final String V_IP4 = "^(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)$"; | |
/** | |
* 非空 | |
*/ | |
private static final String V_NOTEMPTY = "^\\S+$"; | |
/** | |
* 图片 | |
*/ | |
private static final String V_PICTURE = "(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$"; | |
/** | |
* 压缩文件 | |
*/ | |
private static final String V_RAR = "(.*)\\.(rar|zip|7zip|tgz)$"; | |
/** | |
* 日期 | |
*/ | |
private static final String V_DATE = "^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\\d):[0-5]?\\d:[0-5]?\\d$"; | |
/** | |
* 日期 yyyy-MM-dd | |
*/ | |
private static final String V_DATE_YYYY_MM_DD = "^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$"; | |
/** | |
* QQ号码 | |
*/ | |
private static final String V_QQ_NUMBER = "^[1-9]*[1-9][0-9]*$"; | |
/** | |
* 电话号码的函数(包括验证国内区号,国际区号,分机号) | |
*/ | |
private static final String V_TEL = "^(([0\\+]\\d{2,3}-)?(0\\d{2,3})-)?(\\d{7,8})(-(\\d{3,}))?$"; | |
/** | |
* 用来用户注册。匹配由数字、26个英文字母或者下划线组成的字符串 | |
*/ | |
private static final String V_USERNAME = "^\\w+$"; | |
/** | |
* 字母 | |
*/ | |
private static final String V_LETTER = "^[A-Za-z]+$"; | |
/** | |
* 大写字母 | |
*/ | |
private static final String V_LETTER_U = "^[A-Z]+$"; | |
/** | |
* 小写字母 | |
*/ | |
private static final String V_LETTER_I = "^[a-z]+$"; | |
/** | |
* 身份证 | |
*/ | |
private static final String V_IDCARD = "^(\\d{15}$|^\\d{18}$|^\\d{17}(\\d|X|x))$"; | |
/** | |
* 验证密码(数字和英文同时存在) | |
*/ | |
private static final String V_PASSWORD_REG = "[A-Za-z]+[0-9]"; | |
/** | |
* 验证密码长度(6-16位) | |
*/ | |
private static final String V_PASSWORD_LENGTH = "^\\d{6,16}$"; | |
/** | |
* 验证两位数 | |
*/ | |
private static final String V_TWO_POINT = "^[0-9]+(.[0-9]{2})?$"; | |
/** | |
* 验证一个月的31天 | |
*/ | |
private static final String V_31DAYS = "^((0?[1-9])|((1|2)[0-9])|30|31)$"; | |
/** | |
* 登录名 | |
**/ | |
private static final String V_LOGINID = "^[0-9a-zA-Z\u4e00-\u9fa5\uFF21-\uFF3A\uFF41-\uFF5A\uff08\u0028]+[\\w\\--_[0-9]\u4e00-\u9fa5\uFF21-\uFF3A\uFF41-\uFF5A\uff08\uff09\u0028\u0029]+$"; | |
/** | |
* 银行卡号 | |
**/ | |
private static final String BANK_NO = "^([1-9]{1})(\\d{14}|\\d{18})$"; | |
private RegexExtUtil() { | |
} | |
/** | |
* 验证是不是整数 | |
* | |
* @param value 要验证的字符串 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isInteger(String value) { | |
return match(V_INTEGER, value); | |
} | |
/** | |
* 验证是不是正整数 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isPositiveInteger(String value) { | |
return match(V_Z_INDEX, value); | |
} | |
/** | |
* 验证是不是负整数 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isNegativeInteger(String value) { | |
return match(V_NEGATIVE_INTEGER, value); | |
} | |
/** | |
* 验证是不是数字 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isNumber(String value) { | |
return match(V_NUMBER, value); | |
} | |
/** | |
* 验证是不是正数 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isPositiveNumber(String value) { | |
return match(V_POSITIVE_NUMBER, value); | |
} | |
/** | |
* 验证是不是负数 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isNegatineNumber(String value) { | |
return match(V_NEGATINE_NUMBER, value); | |
} | |
/** | |
* 验证一个月的31天 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean is31Days(String value) { | |
return match(V_31DAYS, value); | |
} | |
/** | |
* 验证是不是ASCII | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isASCII(String value) { | |
return match(V_ASCII, value); | |
} | |
/** | |
* 验证是不是中文 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isChinese(String value) { | |
return match(V_CHINESE, value); | |
} | |
/** | |
* 验证是不是中文+点 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isChineseANDDot(String value) { | |
return match(V_CHINESEA_AND_DOT, value); | |
} | |
/** | |
* 验证是不是颜色 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isColor(String value) { | |
return match(V_COLOR, value); | |
} | |
/** | |
* 验证是不是日期 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isDate(String value) { | |
return match(V_DATE, value); | |
} | |
/** | |
* 验证是不是日期 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isDateByYYYYMMDD(String value) { | |
return match(V_DATE_YYYY_MM_DD, value); | |
} | |
/** | |
* 验证是不是邮箱地址 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isEmail(String value) { | |
return match(V_EMAIL, value); | |
} | |
/** | |
* 验证是不是浮点数 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isFloat(String value) { | |
return match(V_FLOAT, value); | |
} | |
/** | |
* 验证是不是正确的身份证号码 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isIDcard(String value) { | |
return match(V_IDCARD, value); | |
} | |
/** | |
* 验证是不是正确的IP地址 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isIP4(String value) { | |
return match(V_IP4, value); | |
} | |
/** | |
* 验证是不是字母 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isLetter(String value) { | |
return match(V_LETTER, value); | |
} | |
/** | |
* 验证是不是小写字母 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isLowerCaseLetter(String value) { | |
return match(V_LETTER_I, value); | |
} | |
/** | |
* 验证是不是大写字母 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isUpperCaseLetter(String value) { | |
return match(V_LETTER_U, value); | |
} | |
/** | |
* 验证是不是手机号码 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isMobile(String value) { | |
return match(V_MOBILE, value); | |
} | |
/** | |
* 验证是不是负浮点数 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isNegativeFloat(String value) { | |
return match(V_NEGATIVE_FLOAT, value); | |
} | |
/** | |
* 验证非空 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isNotEmpty(String value) { | |
return match(V_NOTEMPTY, value); | |
} | |
/** | |
* 校验登录名 | |
* | |
* @param loginId | |
* @return | |
*/ | |
public static boolean isLegalLoginId(String loginId) { | |
return match(V_LOGINID, loginId); | |
} | |
/** | |
* 验证密码(数字和英文同时存在) | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isLegalPassword(String value) { | |
return match(V_PASSWORD_REG, value); | |
} | |
/** | |
* 验证图片 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isPictureFileName(String value) { | |
return match(V_PICTURE, value); | |
} | |
/** | |
* 验证正浮点数 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isPosttiveFloat(String value) { | |
return match(V_POSTTIVE_FLOAT, value); | |
} | |
/** | |
* 验证QQ号码 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isQQnumber(String value) { | |
return match(V_QQ_NUMBER, value); | |
} | |
/** | |
* 验证压缩文件 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isRar(String value) { | |
return match(V_RAR, value); | |
} | |
/** | |
* 验证电话 (包括验证国内区号,国际区号,分机号) | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isTel(String value) { | |
return match(V_TEL, value); | |
} | |
/** | |
* 验证是否纯手机号 | |
* | |
* @param telephone | |
* @return | |
*/ | |
public static boolean isExtTel(String telephone) { | |
if (telephone == null) { | |
return false; | |
} | |
return PATTERN_TEL.matcher(telephone).matches(); | |
} | |
/** | |
* 验证两位小数 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isTwoPointFloat(String value) { | |
return match(V_TWO_POINT, value); | |
} | |
/** | |
* 验证非正浮点数 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isUnpositiveFloat(String value) { | |
return match(V_UNPOSITIVE_FLOAT, value); | |
} | |
/** | |
* 验证非负浮点数 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isUnnegativeFloat(String value) { | |
return match(V_UNNEGATIVE_FLOAT, value); | |
} | |
/** | |
* 验证webURL | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isWebUrl(String value) { | |
return match(V_URL, value); | |
} | |
/** | |
* 验证用户注册。匹配由数字、26个英文字母或者下划线组成的字符串 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isLegalUserName(String value) { | |
return match(V_USERNAME, value); | |
} | |
/** | |
* 验证邮编 | |
* | |
* @param value 要验证的字符串 | |
* @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b> | |
*/ | |
public static boolean isZipcode(String value) { | |
return match(V_ZIPCODE, value); | |
} | |
/** | |
* 校验银行卡号 | |
* | |
* @param bankNo | |
* @return | |
*/ | |
public static boolean isLegalBankNO(String bankNo) { | |
return match(BANK_NO, bankNo); | |
} | |
/** | |
* @param regex 正则表达式字符串 | |
* @param str 要匹配的字符串 | |
* @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false; | |
*/ | |
private static boolean match(String regex, String str) { | |
Pattern pattern = Pattern.compile(regex); | |
Matcher matcher = pattern.matcher(str); | |
return matcher.matches(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment