php - 字符串验证最多 15000 个字符不起作用
问题描述
我正在尝试使用最多 15000 个字符的验证规则来验证 textarea。
这是我创建的规则:
array:1 [▼
"text" => "required|string|max:15000"
]
在我以这种方式连接两个输入之前的某个地方:
$request->merge(['text' => $request->input('text') . PHP_EOL . PHP_EOL . $request->input('sign']);
即使文本输入和符号输入的总和(根据本网站)为 14988 ,代码也未通过验证。
为了计算它,我只是将 textarea 值传递给网站并检查了字符数。
更新
如果我记录输入的长度$request->text
(即使日志中写入的 SAME 字符串是 15000),我会得到这些值:
strlen(trim($request->text)) => 15937
mb_strlen(trim($request->text)) => 15937
我猜它与\r、\n 或\r\n 相关。
第二次更新
我从随机字符串网站创建了字符串,我注意到字符串是 937 行,这比字符串应该是多出的确切数字。
似乎 PHP 将每个换行符计数两次。
解决方案
我建议您在尝试验证之前自己进行字符串操作,将换行符替换PHP_EOL
为内置的 PHP 换行符,以处理 dos 和 Linux 换行符带来的复杂性。
当您从网络复制粘贴时,大部分时间<br>
标签都会转换为 \r\n ,它被识别为两个字符。大多数 Windows 文本编辑器也输出相同的 \r\n 换行符。这就是为什么双重计数。
您可以使用正则表达式或内置str_replace("\r\n",PHP_EOL,$my_text)
来替换换行符。
您可以将 \r\n 替换为 \n 将用于您的字符计数目的,但会根据您的应用程序不准确地显示新行。
推荐阅读
- apache-spark - 如何在 Databricks 中获取为我的 spark 作业运行的节点列表
- java - java - 如何使用java Spring在数据库中保存和显示图像
- flutter - Flutter:如何正确维护文件下载/通过 JavaScript 提取嵌入 PDF 的会话?
- python - 如何在具有外键关系的 APIVIEW 中发布数据“add_by”(在 model.py 中)以及如何在 apiview 中添加权限类
- amazon-web-services - 创建 S3 批处理操作清单文件时如何使用字符串模式?
- java - JAX-RS 应用程序在 WAS Liberty 中不返回以毫秒为单位的日期
- arrays - 在 k 次或更少的操作后具有相等奇偶性的最长子数组
- react-native - 使用 createBottomTabNavigator 不显示任何内容
- php - Codeigniter4 redirect()->to() 不工作
- firebase - 尽管验证了 OAuth 同意,但 Google 登录无法正常工作