【发布时间】: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