10个实用的PHP正则表达式汇总

洛溪
洛溪
发布时间:2026-10-14 | 4人浏览过
原创

掌握高效的正则表达式能显著减少自定义校验逻辑的代码量。本文整理了10个开发场景中常用的PHP正则表达式实例,包含验证邮箱、用户名、IP地址、URL格式等核心需求,并提供可直接复用的代码片段。

常用数据校验正则

在表单提交或API请求处理中,对输入数据进行预校验是确保数据安全的第一步。以下是几种常见字段的正则匹配方案。

第1步:验证电子邮件地址

目的:初步检查邮箱字符串是否符合通用格式规范。 注意:纯正则无法完全验证邮箱是否存在,生产环境建议结合 filter_var 函数使用。

以下为基本正则写法,用于检测字符结构:

$email = "test@example.com";
if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$email)) {
    echo "格式看起来正确";
} else {
    echo "邮箱格式错误";
}

更推荐的PHP内置验证方式:

if (filter_var('test@example.com', FILTER_VALIDATE_EMAIL)) {
    // 合法邮箱
}

第2步:验证用户名

目的:限制用户名仅包含字母、数字和下划线,并设定长度区间(此处示例为5-20位)。

$username = "user_name12";
// /i 标志表示不区分大小写
if (preg_match('/^[a-z\d_]{5,20}$/i', $username)) {
    echo "用户名有效";
}

第3步:验证电话号码(美式格式)

目的:匹配形如 (xxx) xxx-xxxx 或带不同分隔符的电话格式。

$phone = "(021)423-2323";
if (preg_match('/\(\d{3}\)[-\s.]?\d{3}[-\s.]?\d{4}/x', $phone)) {
    echo "电话格式匹配";
}

第4步:验证IPv4地址

目的:严格校验IPv4地址的四个段是否都在 0-255 之间。

$IP = "192.168.1.78";
$pattern = '/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/';
if (preg_match($pattern, $IP)) {
    echo "有效的IPv4地址";
}

第5步:验证邮政编码

目的:匹配美国邮编格式,支持五位数及“五位+四位”扩展格式。

$zipcode = "12345-5434";
if (preg_match("/^([0-9]{5})(-[0-9]{4})?$/i",$zipcode)) {
    echo "邮编格式正确";
}

第6步:验证社会保险号 (SSN)

目的:验证美国SSN标准格式:XXX-XX-XXXX。

$ssn = "333-23-2329";
if (preg_match('/^[\d]{3}-[\d]{2}-[\d]{4}$/', $ssn)) {
    echo "SSN格式正确";
}

第7步:验证信用卡号

目的:根据卡号开头数字区分Visa、MasterCard、Amex等类型进行初步格式匹配。

$cc = "378282246310005";
// 匹配 Visa(4开头), MasterCard(51-55开头), Discover(6011开头), Amex(34/37开头)
$pattern = '/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})$/';
if (preg_match($pattern, $cc)) {
    echo "信用卡号格式符合主要发卡行规则";
}

URL与文本处理相关正则

除了基础数据校验,正则表达式在处理网页链接和文本渲染时也有广泛应用。

第8步:验证URL/域名格式

目的:检查输入的字符串是否是合法的HTTP、HTTPS或FTP URL。

$url = "http://example.com/path";
if (preg_match('/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/ ?/i', $url)) {
    echo "URL结构有效";
}

第9步:从URL中提取域名

目的:从完整链接中截取主机名部分(不含协议和路径)。

$url = "http://example.com/articles";
preg_match('@^ (?::http://)?([^/]+)@i', $url, $matches);
$host = $matches[1] ?? '';
echo $host; // 输出 example.com

第10步:文中关键词高亮显示

目的:在长文本中找到特定词汇并包裹HTML标签以实现前端高亮展示。

$text = "This is a sample text about regex.";
$keyword = "regex";
// \\b 表示单词边界,防止匹配到包含该词的其他词(如 regexp)
$text = preg_replace("/\\b(" . preg_quote($keyword, '/') . ")\\b/i", '\\1', $text);
echo $text;

以上就是这10个常用PHP正则表达式的详细内容,更多关于PHP开发技巧和输入校验的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表