PHP 常用正则表达式速查与验证指南
本文系统梳理了 PHP 开发场景下最常用的正则表达式模式,包括各类数字格式校验、特定字符集限制以及常见互联网标识符(Email、URL、IP)的匹配规则。同时详细解释了关键元字符的作用机制,并提供了在 Web 表单及后端代码中的具体应用实例。
基础数据类型与字符匹配
在处理用户输入时,首先需要确保数据的类型正确。以下规则覆盖了整数、浮点数及字母组合的标准格式校验:
- 非负整数(正整数 + 0):
^/d+$ - 正整数:
^[0-9]*[1-9][0-9]*$ - 非正整数(负整数 + 0):
^((-/d+)|(0+))$ - 负整数:
^-[0-9]*[1-9][0-9]*$ - 整数:
^-?/d+$ - 非负浮点数(正浮点数 + 0):
^/d+(/./d+)?$ - 正浮点数:
^(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*))$ - 非正浮点数(负浮点数 + 0):
^((-/d+(/./d+)?)|(0+(/.0+)?))$ - 负浮点数:
^(-(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*)))$ - 浮点数:
^(-?/d+)(/./d+)?$ - 英文字符串:
^[A-Za-z]+$ - 英数字加下划线串:
^/w+$(等价于[A-Za-z0-9_])
网络标识符与通讯信息校验
针对电子邮件、网址、电话号码及 IP 地址等标准格式,以下是经过验证的正则匹配规则:
- Email 地址:
^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+$或更严谨的/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)* - URL 链接:
^[a-zA-Z]+://(//w+(-//w+)*)(//.(//w+(-//w+)*))*(//?//S*)?$或简化版http://([w-]+.)+[w-]+(/[w- ./?%&=]*)? - IP 地址 (IPv4):
^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$ - 国内固定电话:
((/(/d{2,3}/))|(/d{3}/-))?(/(0/d{2,3}/)|0/d{2,3}-)?[1-9]/d{6,7}(/-/d{1,4})?$ - 手机号码 (中国大陆):
^((/(/d{2,3}/))|(/d{3}/-))?13/d{9}$或提取式(86)*0*13/d{9} - 邮政编码:
^[1-9]/d{5}$或提取式[1-9]{1}(/d+){5} - 腾讯 QQ 号:
^[1-9]*[1-9][0-9]*$
特殊字符与文本清洗
在内容过滤和富文本处理中,常需匹配中文字符、HTML 标签或首尾空格:
- 匹配中文字符:
[/u4e00-/u9fa5] - 匹配双字节字符(含汉字):
[^/x00-/xff] - 匹配首尾空格:
(^/s*)|(/s*$) - 匹配空行:
/n[/s| ]*/r - 匹配 HTML 标签:
<(.*)>.*</1>|<(.*) //> - 混合字符校验(中文、英文、数字、下划线):
^[/u4e00-/u9fa5_a-zA-Z0-9]+$ - SQL 注入关键字拦截:
^(select|drop|delete|create|update|insert).*$
元字符核心机制解析
理解正则表达式的底层逻辑有助于灵活编写复杂规则。以下是 PHP PCRE 引擎中常用的元字符行为:
/:转义字符,用于标记特殊字符或原义字符。^和$:分别匹配字符串的开始和结束位置。*、+、?:量词,分别表示零次或多次、一次或多次、零次或一次。{n}、{n,}、{n,m}:精确指定匹配次数范围。.:除换行符外的任意单字符。()、(?:):捕获组与非捕获组,前者保留匹配结果供后续引用,后者仅用于分组不占用内存。(?=pattern)和(?!pattern):正向和负向预查,用于条件判断但不消耗字符。[xyz]和[^xyz]:字符集合及其否定形式。/d、/D:数字与非数字,等价于[0-9]和[^0-9]。/w、/W:单词字符(字母数字下划线)与非单词字符。/b和/B:单词边界匹配与非边界匹配。
实际应用场景示例
在实际开发中,正则通常结合前端交互与后端验证使用,以减轻服务器压力并确保体验流畅。
第1步:前端实时输入限制
通过 JavaScript 监听输入事件,利用正则即时替换非法字符。例如,限制文本框只能输入中文:
// 限制输入中文
onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"
限制只能输入数字和英文:
// 限制输入数字和英文
onkeyup="value=value.replace(/[^a-zA-Z0-9]/g,'')"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^a-zA-Z0-9]/g,''))"
第2步:PHP 后端数据清洗
在 PHP 中,建议使用 preg_match() 进行一次性验证,或使用 preg_replace() 进行批量替换。对于上述 IP 地址提取,可参考如下逻辑:
$ip_pattern = '/(\d+)\.(\d+)\.(\d+)\.(\d+)/';
preg_match($ip_pattern, $input_string, $matches);
if ($matches) {
// $matches[1] 到 $matches[4] 分别包含 IP 的四段数字
}
以上整理了 PHP 开发中涉及数据格式校验的核心正则技巧。以上就是基于 PHP 常用正则表达式的详细内容,更多关于正则表达式验证的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









