正則校驗工具類
阿新 • • 發佈:2022-05-10
/** * @Author: DengJia * @Date: 2022/5/10 * @Description: 正則校驗工具類 */ public class RegexUtil { /** * 移動手機號 */ private static final Pattern MOBILE_RE = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$"); /** * 帶區號的電話 */ private static final Pattern PHONE_WITH_AREA_CODE_RE = Pattern.compile("^[0][1-9]{2,3}-[0-9]{5,10}$"); /** * 不帶區號的電話 */ private static final Pattern PHONE_WITHOUT_AREA_CODE_RE = Pattern.compile("^[1-9]{1}[0-9]{5,8}$"); /** * 郵箱格式正則表示式 */ private static final Pattern EMAIL_RE = Pattern.compile("^\\w+@(\\w+\\.)+\\w+$"); /** * 身份證 */ private static final Pattern ID_CARD_RE = Pattern.compile("^\\d{15}|\\d{17}[\\dxX]$"); /** * 校驗聯絡(手機、電話)號碼是否合法 * * @param number 號碼 */ public static void validatePhoneNumber(String number) { if (!(isPhone(number) || isMobile(number))) { throw new RuntimeException("號碼校驗失敗,請輸入合法格式!"); } } /** * 校驗電子郵箱是否合法 * * @param email 電子郵箱 */ public static void validateEmail(String email) { if (!email.matches(EMAIL_RE.pattern())) { throw new RuntimeException("郵箱校驗失敗,請輸入合法格式!"); } } /** * 校驗身份證是否合法 * * @param idCard 身份證 */ public static void validateIdCard(String idCard) { if (!idCard.matches(ID_CARD_RE.pattern())) { throw new RuntimeException("身份證校驗失敗,請輸入合法格式!"); } } /** * 校驗身份證與入參年齡、性別是否符合 * * @param idCard 身份證 * @param age 年齡 * @param gender 性別 1男 2女 */ public static void validatePersonalInfo(String idCard, Integer age, Integer gender) { validateIdCard(idCard); // 校驗年齡 if (age != null) { Calendar cal = Calendar.getInstance(); int nowYear = cal.get(Calendar.YEAR), nowMonth = cal.get(Calendar.MONTH) + 1, nowDay = cal.get(Calendar.DATE), year = Integer.parseInt(idCard.substring(6, 10)), month = Integer.parseInt(idCard.substring(10, 12)), day = Integer.parseInt(idCard.substring(12, 14)); int realAge; boolean reach = (month < nowMonth) || (month == nowMonth && day <= nowDay); if (reach) { realAge = nowYear - year; } else { realAge = nowYear - year - 1; } if (!Objects.equals(age, realAge)) { throw new RuntimeException("年齡與身份證不符,請檢查!"); } } // 校驗性別 if (gender != null) { int flag = new Integer(idCard.substring(16, 17)) % 2; boolean match = flag == 1 ? 1 == gender : 2 == gender; if (!match) { throw new RuntimeException("性別與身份證不符,請檢查!"); } } } public static void validatePersonalInfo(String idCard, String age, String gender) { validatePersonalInfo(idCard, Integer.parseInt(age), Integer.parseInt(gender)); } private static boolean isMobile(final String number) { // 手機號驗證 Matcher matcher = MOBILE_RE.matcher(number); return matcher.matches(); } private static boolean isPhone(final String number) { // 電話號碼驗證 Matcher matcher; if (number.length() > 9) { matcher = PHONE_WITH_AREA_CODE_RE.matcher(number); } else { matcher = PHONE_WITHOUT_AREA_CODE_RE.matcher(number); } return matcher.matches(); } }