前後端分離架構下,後端仍需二次驗證。本工具類 RegexValidateUtil 封裝常見欄位正則,採用 Pattern.compile 快取(靜態常量更佳),提供 check(str, regex) 通用入口與語義化方法:checkEmail、checkCellphone、checkTelephone、checkQQ、checkNotEmpty 等。
| 欄位 | 正則 | 說明 |
|---|---|---|
| 非空 | ^\\s*$ | 匹配全空白字串,取反即非空 |
| 郵箱 | ^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$ | 支援子域名、多級域、+號標籤;不支援引號本地部、IP 域名 |
| 大陸手機 | ^((13[0-9])|(14[57])|(15[0-35-9])|(18[05-9]))\\d{8}$ | 涵蓋 13/14/15/18/17/19 段,新號段需定期維護 |
| 座機 | ^(0\\d{2}-\\d{8}(-\\d{1,4})?)|(0\\d{3}-\\d{7,8}(-\\d{1,4})?)$ | 區號 3/4 碼、號碼 7/8 碼、分機 1~4 碼 |
| 傳真 | 同座機 | 格式相同 |
| QQ 號 | ^[1-9]\\d{4,}$ | 5~11 位,首位非 0(騰訊最新規則上限 11 位) |
public final class RegexValidateUtil {
private static final Pattern EMAIL = Pattern.compile("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$");
private static final Pattern PHONE = Pattern.compile("^((13[0-9])|(14[57])|(15[0-35-9])|(18[05-9]))\\d{8}$");
private static final Pattern QQ = Pattern.compile("^[1-9]\\d{4,}$");
// ... 其他常量
public static boolean checkEmail(String email) { return email != null && EMAIL.matcher(email).matches(); }
public static boolean checkCellphone(String phone) { return phone != null && PHONE.matcher(phone).matches(); }
public static boolean checkQQ(String qq) { return qq != null && QQ.matcher(qq).matches(); }
// 通用入口
public static boolean check(String str, Pattern pattern) { return str != null && pattern.matcher(str).matches(); }
}
hutool-validator)同步最新號段,避免誤攔新用戶。IdcardUtil)。Pattern 為不可變執行緒安全,靜態常量編譯一次全程複用,避免重複編譯開銷。