首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

常用正則表達式大全:數字、日期、郵箱、手機、身份證、URL 等實戰模式

     編輯:Java 綜合教學

常用正則表達式大全:數字、日期、郵箱、手機、身份證、URL 等實戰模式

正則表達式是字串驗證、解析、替換的利器。本文整理 36 個高頻實戰模式,涵蓋數字驗證、中英文字符、顏色、日期、郵箱、身份證、IP、手機、密碼、圖片、壓縮包、電話、URL、用戶名、郵編、真實姓名、公司資訊等場景,可直接複製到專案中使用。

一、數字驗證類

名稱正則模式說明
浮點數^([+-]?)\d*\.\d+$含正負號、整數部分可為空(如 .5)
正浮點數^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$大於 0
負浮點數^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$小於 0
浮點數(含0)^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?.0+|0)$涵蓋正負、0、.0 等
非負浮點數^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?.0+|0$正浮點數 + 0
非正浮點數^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?.0+|0$負浮點數 + 0
整數^-?[1-9]\d*$非零整數
正整數^[1-9]\d*$>0
負整數^-[1-9]\d*$<0
數字(整數/浮點)^([+-]?)\d*\.?\d+$通用數字
正數(含0)^[1-9]\d*|0$正整數+0
負數(含0)^-[1-9]\d*|0$負整數+0

二、字符類型類

名稱正則模式說明
ASCII 字符^[\x00-\xFF]+$僅 ASCII
中文字符^[\u4e00-\u9fa5]+$基本漢字區
顏色十六進制^[a-fA-F0-9]{6}$如 FF0033
英文字母^[A-Za-z]+$大小寫皆可
小寫字母^[a-z]+$
大寫字母^[A-Z]+$

三、業務場景類

名稱正則模式說明
日期^\d{4}(-|/|\.)\d{1,2}\1\d{1,2}$YYYY-MM-DD 或 YYYY/MM/DD 或 YYYY.MM.DD,分隔符一致
郵箱^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$支援子域名、多級域名
身份證(15/18位)^[1-9]([0-9]{14}|[0-9]{17})$簡易版,嚴格版需校驗碼算法
IPv4^(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)){3}$每段 0-255
手機號(大陸)^0?(13|15|17|18|14)[0-9]{9}$主流號段,可擴展
非空^\S+$含不可見字符
密碼^.*[A-Za-z0-9\w_-]+.*$字母數字下劃線連字符,建議加長度限制
純數字^[0-9]+$
圖片檔名(.*)\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$常見格式
QQ 號^[1-9]*[1-9][0-9]*$非零開頭
壓縮包(.*)\.(rar|zip|7zip|tgz)$
電話號碼^[0-9\-()()]{7,18}$含區號、分機、括號
URL^http[s]?:\/\/([\w-]+\.)+[\w-]+([\w-./?%&=]*)?$http/https
用戶名^[A-Za-z0-9_\-\u4e00-\u9fa5]+$字母數字下劃線連字符中文
部門名^[A-Za-z0-9_()()\-\u4e00-\u9fa5]+$
郵編^\d{6}$中國大陸 6 位
真實姓名^[A-Za-z\u4e00-\u9fa5]+$中英文
公司名稱^[A-Za-z0-9_()()\-\u4e00-\u9fa5]+$
公司地址^[A-Za-z0-9_()()#\-\u4e00-\u9fa5]+$
公司網站^http[s]?:\/\/([\w-]+\.)+[\w-]+([\w-./?%&#=]*)?$

四、Java 中使用提示


// 編譯模式(效能較好,可重用)
Pattern emailPattern = Pattern.compile(EMAIL_REGEX);
Matcher matcher = emailPattern.matcher(input);
boolean valid = matcher.matches();

// 一次性簡寫
boolean valid = input.matches(EMAIL_REGEX);

// 群組捕獲範例:解析日期
Pattern datePat = Pattern.compile("^(\\d{4})[-/.](\\d{1,2})[-/.](\\d{1,2})$");
Matcher m = datePat.matcher("2024-05-20");
if (m.matches()) {
    String year = m.group(1);  // 2024
    String month = m.group(2); // 05
    String day = m.group(3);   // 20
}

五、效能與維護建議

  1. 預編譯 Pattern:靜態常量持有 Pattern 實例,避免重複編譯。
  2. 避免過度複雜:極長正則難維護,考慮拆分多條或用程式碼輔助驗證(如身份證校驗碼)。
  3. 小心災難性回溯:巢狀量詞 (a+)+ 遇到不匹配輸入會指數級回溯,改用佔有優先量詞 a++ 或原子組 (?>a+)。
  4. 單元測試覆蓋:正則邊界情況多,務必寫測試案例(正向、負向、邊界)。

收藏此表,下次表單驗證、日誌解析、資料清洗直接拿來用!若有特殊業務需求,可在現有模式基礎上微調。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved