使用Laravel验证验证UUID

rap*_*2-h 4 php laravel laravel-5 laravel-5.5

是否有内置的方法来验证带有验证规则的UUID?我在" 可用验证规则 "文档中没有找到任何相关信息.

Bry*_*jer 8

Laravel 5.6现在提供开箱即用的ramesey/uuid包.您现在可以使用其"isValid"方法来检查UUID.我注意到上面解决方案中的正则表达式有时会失败.我对Laravel内部使用的软件包还没有任何问题.

Validator::extend('uuid', function ($attribute, $value, $parameters, $validator) {
    return \Ramsey\Uuid\Uuid::isValid($value);
});
Run Code Online (Sandbox Code Playgroud)

与问题无关,但您现在也可以使用Laravel的"Str"类生成UUID.这就是ramsey/uuid现在默认包含在内的原因,因此无需包含自己的正则表达式.

\Illuminate\Support\Str::uuid();
Run Code Online (Sandbox Code Playgroud)


Leg*_*nar 7

实际上,Laravel 5.7 支持 UUID 验证。

$validation = $this->validate($request, [
    'uuid_field' => 'uuid'
]);
Run Code Online (Sandbox Code Playgroud)

基于文档


wsh*_*afa 5

您可以在Laravel中扩展验证器帮助程序以添加自定义验证规则,例如,我创建了自己的验证规则以使用regex验证位置,如下所示:

Validator::extend('location', function ($attribute, $value, $parameters, $validator) {
    return preg_match('/^-?\d{1,2}\.\d{6,}\s*,\s*-?\d{1,2}\.\d{6,}$/', $value);
});
Run Code Online (Sandbox Code Playgroud)

引用此文章:PHP preg_match UUID v4

您可以使用UUID正则表达式来创建它,如下所示:

Validator::extend('uuid', function ($attribute, $value, $parameters, $validator) {
    return preg_match('/[a-f0-9]{8}\-[a-f0-9]{4}\-4[a-f0-9]{3}\-(8|9|a|b)[a-f0-9]{3??}\-[a-f0-9]{12}/', $value);
});
Run Code Online (Sandbox Code Playgroud)

希望这符合您的要求。