最全常用正則表達式大全:數字、字符、郵箱、手機、身份證、URL、金額一網打盡
正則表達式是文本處理的瑞士軍刀。本文整理了開發中最高頻的驗證場景,按「數字驗證、字符驗證、特殊需求」三大類分類,附帶 Java/JS 通用寫法與邊界說明,建議收藏備查。
一、數字驗證表達式
| 場景 | 正則表達式 | 說明 |
| 純數字 | ^[0-9]*$ | 包含空串 |
| n 位數字 | ^\d{n}$ | 固定長度 |
| 至少 n 位 | ^\d{n,}$ | |
| m-n 位 | ^\d{m,n}$ | |
| 非零開頭整數 | ^[1-9]\d*$ | 不含 0 |
| 非零開頭,最多兩位小數 | ^([1-9]\d*)+(\.\d{1,2})?$ | 金額常用 |
| 帶 1-2 位小數的正負數 | ^(\-)?\d+(\.\d{1,2})?$ | |
| 正浮點數 | ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ | 排除 0.0 |
| 負浮點數 | ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ | |
| 通用浮點數 | ^(-?\d+)(\.\d+)?$ | 含整數 |
二、字符驗證表達式
| 場景 | 正則表達式 | 說明 |
| 漢字 | ^[\u4e00-\u9fa5]{0,}$ | Unicode 範圍 |
| 英文+數字 | ^[A-Za-z0-9]+$ | |
| 長度 3-20 任意字符 | ^.{3,20}$ | |
| 26 字母 | ^[A-Za-z]+$ | |
| 大寫字母 | ^[A-Z]+$ | |
| 小寫字母 | ^[a-z]+$ | |
| 數字+字母+下劃線 | ^\w+$ 或 ^\w{3,20}$ | \w = [A-Za-z0-9_] |
| 中英數+下劃線 | ^[\u4E00-\u9FA5A-Za-z0-9_]+$ | |
| 中英數(無符號) | ^[\u4E00-\u9FA5A-Za-z0-9]+$ | |
三、特殊需求表達式(高頻業務場景)
| 場景 | 正則表達式 | 備註 |
| Email | ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ | RFC 5322 簡化版 |
| 域名 | [a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.? | |
| URL | ^https?://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ | 支援 http/https |
| 手機號(中國大陸) | ^(13[0-9]|14[57]|15[0-35-9]|18[0-9])\d{8}$ | 含新號段 |
| 電話號碼 | ^(\d{3,4}-)?\d{7,8}$ | 含區號 |
| 國內電話 | \d{3}-\d{8}|\d{4}-\d{7} | 0511-4405222 |
| 身份證(15/18位) | ^\d{15}|\d{18}$ | 不驗證校驗碼 |
| 短身份證(含X) | ^[0-9]{7,18}(x|X)?$ | |
| 賬號合法性 | ^[a-zA-Z][a-zA-Z0-9_]{4,15}$ | 字母開頭 5-16 字節 |
| 密碼(字母開頭,6-18位) | ^[a-zA-Z]\w{5,17}$ | 字母數字下劃線 |
| 強密碼(大小寫+數字,8-10位) | ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$ | 零寬斷言 |
| 日期(YYYY-MM-DD) | ^\d{4}-\d{1,2}-\d{1,2}$ | 不驗證合法性 |
| 月份(01-12) | ^(0?[1-9]|1[0-2])$ | |
| 日期(01-31) | ^((0?[1-9])|((1|2)[0-9])|30|31)$ | |
四、金額格式驗證(遞進式設計)
從簡單到嚴謹,最終推薦生產可用版本:
^[1-9][0-9]*$ —— 僅正整數,拒絕 0
^(0|[1-9][0-9]*)$ —— 允許 0
^(0|-?[1-9][0-9]*)$ —— 允許負號(金額通常不需要)
^[0-9]+(\.[0-9]+)?$ —— 允許小數,但 10. 不通過
^[0-9]+(\.[0-9]{2})?$ —— 強制兩位小數
^[0-9]+(\.[0-9]{1,2})?$ —— 允許 1-2 位小數
^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{1,2})?$ —— 支持千分位逗號
- 最終推薦:
^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(\.[0-9]{1,2})?$ —— 兼容無逗號、有逗號、整數、小數
五、其他實用表達式
- XML 文件名:
^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[xX][mM][lL]$
- 中文字符:
[\u4e00-\u9fa5]
- 雙字節字符:
[^\x00-\xff](含漢字,計算長度時雙字節算 2)
- 空白行:
\n\s*\r(可用於刪除空行)
- HTML 標籤:
<(\S*?)[^>]*>.*?</\1>|<.*? />(僅能處理簡單嵌套)
- 首尾空白:
^\s*|\s*$(trim 利器)
- 騰訊 QQ 號:
[1-9][0-9]{4,}(從 10000 起)
- 郵政編碼:
[1-9]\d{5}(?!\d)(6 位數字)
- IPv4 地址:
((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)
六、前端常用驗證速查(RegularExpressionValidator)
| 驗證項 | 表達式 |
| 只能輸入數字 | ^[0-9]*$ |
| 只能輸入 n 位數字 | ^\d{n}$ |
| 只能輸入至少 n 位 | ^\d{n,}$ |
| 只能輸入 m-n 位 | ^\d{m,n}$ |
| 兩位小數正實數 | ^[0-9]+(\.[0-9]{2})?$ |
| 1-3 位小數正實數 | ^[0-9]+(\.[0-9]{1,3})?$ |
| 非零正整數 | ^\+?[1-9][0-9]*$ |
| 非零負整數 | ^-[1-9][0-9]*$ |
| 長度 3 字符 | ^.{3}$ |
| 26 英文字母 | ^[A-Za-z]+$ |
| 密碼驗證 | ^[a-zA-Z]\w{5,17}$ |
| 含特殊字符 | [^%&',;=?$\x22]+ |
| 只能輸入漢字 | ^[\u4e00-\u9fa5]{0,}$ |
七、JavaScript 實用片段
// 1. 計算字符串長度(雙字節算 2)
String.prototype.len = function() {
return this.replace(/[^\x00-\xff]/g, "aa").length;
};
// 2. trim 實現
String.prototype.trim = function() {
return this.replace(/(^\s*)|(\s*$)/g, "");
};
// 3. IP 轉長整型
function IP2V(ip) {
var re = /(\d+)\.(\d+)\.(\d+)\.(\d+)/g;
if (re.test(ip)) {
return RegExp.$1 * Math.pow(255,3) + RegExp.$2 * Math.pow(255,2) + RegExp.$3 * 255 + RegExp.$4 * 1;
}
throw new Error("Not a valid IP address!");
}
// 4. 從 URL 提取文件名
var s = "https://www.example.com/page1.htm";
s = s.replace(/(.*\/){0,}([^\.]+).*/ig, "$2"); // page1.htm
// 5. 限制輸入框只能輸入中文
// onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')"
// onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
使用提示
- Java 中字符串雙重轉義:
\\d、\\.、\\\\。
- JS 中直接寫
\d、\.、\\。
- 邊界錨點
^ $ 必加,防止部分匹配繞過驗證。
- 複雜嵌套 HTML 請用解析器(如 Jsoup),正則無法完美處理遞歸結構。