10个实用的PHP正则表达式汇总
掌握高效的正则表达式能显著减少自定义校验逻辑的代码量。本文整理了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开发技巧和输入校验的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









