Laravel 表单验证Rule::in中文时有bug

如下代码,始终返回true

    $validator =\Illuminate\Support\Facades\Validator::make(
        ['name' => '张三'],
        ['name' => \Illuminate\Validation\Rule::in(['张三', '李四'])]
    );

    dd(app()->version(), $validator->fails());

目前用过两个Laravel版本6和8都有这个bug。有大佬知道怎么解决吗

运行结果

Laravel 表单验证Rule::in中文时有bug

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

如果你是在 Windows 下,那猜测跟你的 locale 设置有关,因为在 in 规则的内部使用了 str_getcsv 来解析参数,而 str_getcsv 这个方法会受到 locale 的设置在分割字符串的时候出现意外情况,而自 PHP 8 开始默认的 locale 发生了变化,就不会再有这个问题了。

file
github.com/laravel/framework/blob/...

Laravel

编写代码进行测试,结果不符合预期。

Laravel

你可以在代码前面使用 setlocale(LC_ALL, 'C'); 修改 locale 信息后,再执行看看。

详见:Windows 下 PHP 7 中 *getcsv 函数解析 CSV 错误的问题记录

9个月前 评论
讨论数量: 6

如果你是在 Windows 下,那猜测跟你的 locale 设置有关,因为在 in 规则的内部使用了 str_getcsv 来解析参数,而 str_getcsv 这个方法会受到 locale 的设置在分割字符串的时候出现意外情况,而自 PHP 8 开始默认的 locale 发生了变化,就不会再有这个问题了。

file
github.com/laravel/framework/blob/...

Laravel

编写代码进行测试,结果不符合预期。

Laravel

你可以在代码前面使用 setlocale(LC_ALL, 'C'); 修改 locale 信息后,再执行看看。

详见:Windows 下 PHP 7 中 *getcsv 函数解析 CSV 错误的问题记录

9个月前 评论

我用laravel8测试你这个返回false

Laravel

Laravel

9个月前 评论
清风 (楼主) 9个月前
清风 (楼主) 9个月前
随波逐流

应该是你环境的影响的,我本地也是8.x,结果是正常的。

9个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!