【问题标题】:string validation max 15000 characters not working字符串验证最多 15000 个字符不起作用
【发布时间】:2021-11-23 04:20:04
【问题描述】:

我正在尝试使用最多 15000 个字符的验证规则来验证 textarea。

这是我创建的规则:

array:1 [▼
    "text" => "required|string|max:15000"
]

在我以这种方式连接两个输入之前的某个地方:

$request->merge(['text' => $request->input('text') . PHP_EOL . PHP_EOL . $request->input('sign']);

即使文本输入和符号输入之和为(根据this website)为14988,代码也未通过验证。
为了计算它,我只是将 textarea 值传递给网站并检查了字符数。

更新
如果我记录$request->text 输入的长度(即使日志中写入的 SAME 字符串是 15000),我会得到这些值:

strlen(trim($request->text)) => 15937
mb_strlen(trim($request->text)) => 15937

我猜它与\r、\n或\r\n有关。

第二次更新
我从随机字符串网站创建了字符串,我注意到该字符串是 937 行,这比字符串应该是多出的确切数字。
似乎 PHP 将每个换行符计数两次。

【问题讨论】:

  • 好吧,如果您只看到与您实际指定的值非常接近的值的效果,那么我们可能会假设验证本身可以正常工作,但您数错了。 .. 或 不同 也许,关于换行符之类的东西可能会以 \r、\n 或 \r\n 出现。
  • 您可能是对的,但我该如何检查呢?我正在尝试记录请求输入的值
  • trim() 在进行验证之前。
  • @nice_dev 我试过了,如果我将日志文件中的值复制到那个网站,我会得到 15000 个字符。它应该通过验证。
  • @nice_dev 是的。我根据输入字符串中找到的换行符的数量更改了最大值。

标签: php validation laravel-5 laravel-validation


【解决方案1】:

我建议您在尝试验证之前自己进行字符串操作,将换行符替换为PHP_EOL 这是内置的 PHP 换行符,用于处理 dos 和 Linux 换行符带来的复杂性字符。

当您大部分时间从 Web 复制粘贴时,<br> 标记将转换为 \r\n,它被识别为两个字符。大多数 Windows 文本编辑器也输出相同的 \r\n 换行符。这就是重复计数的原因。

您可以使用正则表达式或内置str_replace("\r\n",PHP_EOL,$my_text) 来替换换行符。

您可以仅将 \r\n 替换为 \n 将用于您的字符计数目的,但会根据您的应用程序显示不准确的新行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2013-08-19
    • 2022-01-17
    • 2012-12-11
    相关资源
    最近更新 更多