正則表達式是字串驗證、解析、替換的利器。本文整理 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-./?%=]*)?$ |
// 編譯模式(效能較好,可重用)
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
}
Pattern 實例,避免重複編譯。(a+)+ 遇到不匹配輸入會指數級回溯,改用佔有優先量詞 a++ 或原子組 (?>a+)。收藏此表,下次表單驗證、日誌解析、資料清洗直接拿來用!若有特殊業務需求,可在現有模式基礎上微調。