常用正则表达式收集

常用正则表达式速查表,包含数字校验、字符校验、特殊需求等场景

正则表达式是繁琐的,但它是强大的。学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。

一、校验数字的表达式

场景正则表达式
纯数字^[0-9]*$
n位数字^\d{n}$
至少n位数字^\d{n,}$
m-n位数字^\d{m,n}$
零和非零开头`^(0
非零开头最多2位小数^([1-9][0-9]*)+(.[0-9]{1,2})?$
带1-2位小数的数^(\-)?\d+(\.\d{1,2})?$
正数、负数、小数`^(-
2位小数正实数^[0-9]+(.[0-9]{2})?$
1-3位小数正实数^[0-9]+(.[0-9]{1,3})?$
非零正整数^[1-9]\d*$^\+?[1-9][0-9]*$
非零负整数^-[1-9]\d*$
非负整数^\d+$ 或 `^[1-9]\d*
非正整数`^-[1-9]\d*
非负浮点数^\d+(\.\d+)?$
非正浮点数`^((-\d+(.\d+)?)
正浮点数`^[1-9]\d*.\d*
负浮点数`^-([1-9]\d*.\d*
浮点数^(-?\d+)(\.\d+)?$

二、校验字符的表达式

场景正则表达式
汉字^[\u4e00-\u9fa5]{0,}$
英文和数字^[A-Za-z0-9]+$
4-40位字符^[A-Za-z0-9]{4,40}$
3-20位字符^.{3,20}$
26个英文字母^[A-Za-z]+$
26个大写字母^[A-Z]+$
26个小写字母^[a-z]+$
数字和字母^[A-Za-z0-9]+$
字母、数字、下划线^\w+$^\w{3,20}$
中文、英文、数字、下划线^[\u4E00-\u9FA5A-Za-z0-9_]+$
中文、英文、数字^[\u4E00-\u9FA5A-Za-z0-9]+$
禁止特殊字符[^%&',;=?$\x22]+

三、特殊需求表达式

1. Email 邮箱

^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
// PHP 示例
$email = 'test@example.com';
$pattern = '/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/';
if (preg_match($pattern, $email)) {
    echo "邮箱格式正确";
}

2. URL 网址

[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?

3. 手机号码(中国大陆)

^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|16[2|6]|17[0-8]|18[0-9]|19[0-9])d{8}$
// 宽松匹配 11 位手机号
function isValidPhone($phone) {
    return preg_match('/^1[3-9]\d{9}$/', $phone);
}

4. 电话号码

^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$

5. 身份证号码

// 15位或18位
^\d{15}|\d{18}$

// 18位(严格)
/^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/
function isValidIdCard($id) {
    if (strlen($id) == 18) {
        return preg_match('/^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/', $id);
    } elseif (strlen($id) == 15) {
        return preg_match('/^[1-9]\d{5}\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$/', $id);
    }
    return false;
}

6. 账号(字母开头)

^[a-zA-Z][a-zA-Z0-9_]{4,15}$   // 5-16位

7. 密码强度

// 弱密码(字母开头,6-18位)
^[a-zA-Z]\w{5,17}$

// 强密码(大小写字母+数字,8-10位)
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

8. 日期格式

^\d{4}-\d{1,2}-\d{1,2}

9. 日期范围

// 12个月:01~09 和 1~12
^(0?[1-9]|1[0-2])$

// 31天:01~09 和 1~31
^((0?[1-9])|((1|2)[0-9])|30|31)$

10. 货币金额

// 10000.00 或 10,000.00
^[1-9][0-9]*$

// 不以0开头
^(0|[1-9][0-9]*)$

// 可选小数(必须2位)
^[0-9]+(.[0-9]{2})?$

// 允许千分位
^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$

四、常用场景正则

1. IP 地址

// 简单版
\d+\.\d+\.\d+\.\d+

// 严格版
((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))

2. 腾讯 QQ 号

[1-9][0-9]{4,}

3. 中国邮政编码

[1-9]\d{5}(?!\d)

4. XML 文件

^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$

5. 中文字符

[\u4e00-\u9fa5]

6. 双字节字符

[^\x00-\xff]

这一类「非 ASCII」写法常用来粗略匹配中文等宽字符;若要严格限定中日韓统一表意文字,可再配合 [\u4e00-\u9fff] 等 Unicode 区间。PHP 等对 UTF-8 文本建议使用带 u 修饰的正则。

7. 小结

以上条目均为常见写法模板,上线前务必用真实样本与边界数据回归测试;不同语言的正则方言(回溯、分支、贪婪性)会有差异,移植时请以目标引擎文档为准。

© 2016-2026 Yison. All rights reserved.
使用 Hugo 构建
主题 StackJimmy 设计