如何使用正则表达式检查 ramsey/uuid 要求?

Ban*_*Sf4 3 regex doctrine symfony

我正在开发 symfony 5 项目。

\n\n

我使用拉姆齐/uuid。

\n\n

我的学说.yaml

\n\n
 dbal:\n     types:\n         uuid: Ramsey\\Uuid\\Doctrine\\UuidType\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的控制器中的路线

\n\n
/**\n * @Route(\n *     "/job/{id}",\n *     name="job_show",\n *     methods={"GET"}\n * )\n */\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想添加验证“id”参数是否为 uuid 的要求。

\n\n

我尝试了几个正则表达式,但没有一个起作用:

\n\n

正则表达式尝试过:

\n\n
requirements={"id"="/^[a-f0-9]{8}\\-[a-f0-9]{4}\\-4[a-f0-9]{3}\\-[a-f0-9]{4\xe2\x80\x8b}\\-[a-f0-9]{12}$/"}\n
Run Code Online (Sandbox Code Playgroud)\n\n
requirements={"id"="/^[a-f0-9\\-]{36}$/"}\n
Run Code Online (Sandbox Code Playgroud)\n\n

每次我收到此错误时:

\n\n
\n

找不到“GET /job/dc5a945c-25a1-4760-bd69-970d94560cce”的路由

\n
\n\n

我看过几个类似的问题,例如使用正则表达式在文本中搜索 UUID,但没有一个对我有帮助。

\n\n

有谁知道我的错误可能来自哪里或如何以不同的方式做?

\n

COi*_*Oil 6

您可以使用:

requirements={"id"="[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"})
Run Code Online (Sandbox Code Playgroud)

或者,从 Symfony 6.1 开始,您可以使用预定义的路由要求:

use Symfony\Component\Routing\Requirement\Requirement;

#[Route('/job/{id}',
    name: 'job_show',
    requirements: ['id' => Requirement::UUID_V6]
)]
Run Code Online (Sandbox Code Playgroud)

查看Symfony 博客上的功能介绍。