我有一个用户输入他的工作车间代码的输入,工作车间代码必须是 10 位数字。所以在我的验证中,我有:
$apply_data = $request->validate([
'workshop_name' => 'required|string',
'workshop_code' => 'required|string|digits:10',
]);
Run Code Online (Sandbox Code Playgroud)
现在当用户输入 1231231231 就可以了。但如果用户输入?????????? (10 个阿拉伯数字而不是英文数字)Laravel 将返回以下错误
工作车间代码必须是 10 位数字
我猜 laravel 正在使用strlen而不是mb_strlen,因为车间实际上是 10 位数字。
我怎样才能解决这个问题?
更新 Laravel 实际上使用的是 strlen 而不是 mb_strlen https://github.com/laravel/framework/blob/41ea7cc3bb898ff86505d3798d8acbb8992a0aad/src/Illuminate/Validation/Concerns/ValidatesAttributes.php#L414
根据我的评论,您可以通过使用正则表达式确定输入是 10 个 unicode 数字来实现此目的,如下所示:
$apply_data = $request->validate([
'workshop_name' => 'required|string',
'workshop_code' => [ 'required', 'string', 'regex:/^\p{N}{10}$/u' ],
], [
'regex' => 'Workshop code must consist of 10 numbers'
]);
Run Code Online (Sandbox Code Playgroud)
\p{N}表示具有属性 N(数字)的 unicode 字符
| 归档时间: |
|
| 查看次数: |
769 次 |
| 最近记录: |