PHP校验文本域多行输入 要求每行仅单个合法IP地址
文本域IP输入校验实现方案
校验必须以服务端(PHP)逻辑为核心,前端校验仅可作为体验优化(可被用户轻易绕过),最终实现「每行仅允许填写一个合法IP」的限制,具体实现如下:
核心校验流程
- 接收输入后统一转换不同系统的换行符格式,按行拆分内容,过滤无有效内容的空行
- 逐行去除首尾空白字符,校验单行内容是否为合法IP地址
- 收集所有非法行的错误提示,只要存在非法内容就终止写入逻辑,返回错误信息
- 全部内容校验通过后,将合法IP按每行一个的格式重新拼接,清理多余空行、无效空格后写入文件
可直接使用的PHP代码
// 接收文本域输入,统一换行符为\n格式,兼容Windows、Mac、Linux系统的换行差异 $rawInput = str_replace(["\r\n", "\r"], "\n", trim($_POST["text_area"] ?? '')); // 按换行拆分所有行,过滤完全空白的空行 $ipLines = array_filter(explode("\n", $rawInput), function($line) { return trim($line) !== ''; }); $errors = []; $validIpList = []; foreach ($ipLines as $lineIndex => $lineContent) { $currentIp = trim($lineContent); // 校验IP合法性:如果仅允许IPv4,将下方参数改为 FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 // 仅允许IPv6则改为 FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 if (!filter_var($currentIp, FILTER_VALIDATE_IP)) { $errors[] = sprintf("第%d行输入「%s」不是合法IP地址", $lineIndex + 1, htmlspecialchars($currentIp)); continue; } $validIpList[] = $currentIp; } // 存在非法输入时返回错误,终止文件写入 if (!empty($errors)) { // 此处可替换为你自己的错误处理逻辑,比如携带错误信息跳转回表单页 foreach ($errors as $error) { echo "<p style='color: #ff0000;'>{$error}</p>"; } exit; } // 所有IP校验通过,写入目标文件 $file = "ip_list.txt"; file_put_contents($file, implode("\n", $validIpList)); // 此处可追加写入成功的提示、跳转逻辑
补充说明
- 不推荐手写正则实现IP校验,PHP内置的
filter_var方法已经覆盖了所有IP合法性的边界场景(比如保留地址、边界IP、格式校验等),可靠性远高于自定义正则 - 可额外添加前端校验提升使用体验,比如输入时实时检测行内容、即时提示错误,但绝对不能省略后端校验
- 参考的文本域控件样式如下:

内容的提问来源于stack exchange,提问作者user18737162
相关产品推荐
相关产品推荐

