PHP表单中处理和统计手机号码:自动过滤并计数
在Web开发场景中,经常需要收集用户提交的手机号信息,同时需要对无效的手机号进行过滤,并统计有效手机号的数量。本文将介绍如何通过PHP实现表单提交后手机号码的筛选、处理和计数功能。
功能需求分析
提供一个HTML表单,允许用户输入多个手机号码,支持换行分隔输入
提交表单后,PHP脚本接收输入的手机号数据
按照中国大陆手机号规则过滤无效号码:长度为11位,以1开头,第二位是3-9的数字
统计有效手机号的数量,并展示过滤后的有效号码列表
HTML表单设计
首先我们创建一个简单的表单页面,使用<textarea>标签让用户可以输入多个手机号,每个号码占一行:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>手机号筛选统计</title> </head> <body> <h3>请输入手机号码(每个号码占一行)</h3> <form method="post" action="handle_phone.php"> <textarea name="phones" rows="10" cols="30" placeholder="例如: 13800138000 13912345678 12345678901"></textarea> <br><br> <input type="submit" value="提交筛选"> </form> </body> </html>
PHP处理逻辑实现
接下来编写handle_phone.php脚本,实现手机号接收、过滤、统计的功能:
<?php
// 初始化变量
$validPhones = [];
$errorMsg = '';
// 判断是否有表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 检查是否提交了手机号字段
if (!isset($_POST['phones']) || empty(trim($_POST['phones']))) {
$errorMsg = '请输入至少一个手机号码';
} else {
// 获取输入的手机号字符串,按换行分割为数组
$phoneStr = trim($_POST['phones']);
$phoneList = explode("n", str_replace("r", "", $phoneStr));
// 遍历每个手机号进行校验
foreach ($phoneList as $phone) {
$phone = trim($phone);
// 跳过空行
if (empty($phone)) {
continue;
}
// 正则匹配中国大陆手机号规则:11位,1开头,第二位是3-9
if (preg_match('/^1[3-9]d{9}$/', $phone)) {
$validPhones[] = $phone;
}
}
}
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>手机号筛选结果</title>
</head>
<body>
<h3>手机号筛选统计结果</h3>
<?php if (!empty($errorMsg)): ?>
<p style="color: red;"><?php echo htmlspecialchars($errorMsg); ?></p>
<?php else: ?>
<p>有效手机号数量:<strong><?php echo count($validPhones); ?></strong></p>
<?php if (count($validPhones) > 0): ?>
<p>有效手机号列表:</p>
<ul>
<?php foreach ($validPhones as $phone): ?>
<li><?php echo htmlspecialchars($phone); ?></li>
<?php endforeach; ?>
</ul>
<?php else: ?>
<p>未检测到有效手机号,请检查输入格式</p>
<?php endif; ?>
<?php endif; ?>
<br>
<a href="javascript:history.back()">返回重新输入</a>
</body>
</html>核心逻辑说明
上述PHP脚本的核心逻辑可以分为以下几个部分:
请求方法判断:通过
$_SERVER['REQUEST_METHOD']检查是否为POST提交,避免直接访问脚本导致的错误数据预处理:将用户输入的包含换行的字符串,通过
explode分割为数组,同时处理Windows和Unix系统的换行符差异正则校验:使用正则表达式
/^1[3-9]d{9}$/匹配符合规则的手机号,其中^表示开头,$表示结尾,1匹配首位数字,[3-9]匹配第二位数字范围,d{9}匹配后续9位数字结果展示:使用
count()函数统计有效手机号数量,通过遍历数组输出有效号码列表
扩展优化建议
如果需要更完善的功能,可以考虑以下扩展方向:
去重处理:使用
array_unique()函数过滤重复的手机号,避免重复计数运营商判断:根据手机号前三位数字,匹配对应的运营商(如130-139属于联通,134-139、147、150-152、157-159、178、182-184、187-188属于移动等)
导出功能:将筛选后的有效手机号导出为CSV格式文件,方便后续数据处理
输入格式兼容:支持用户使用逗号、空格等分隔符输入手机号,提升用户体验
总结
通过PHP结合正则表达式,可以快速实现表单提交手机号后的过滤和统计功能。核心是利用正则匹配规则筛选有效号码,再结合数组操作完成计数和展示。该方案逻辑清晰、实现简单,适合大多数需要手机号收集处理的业务场景。