Symfony 6验证器不适用于电话号码

Symfony 6 validator not working for phone number

提问人:M. Khromov 提问时间:12/22/2022 更新时间:11/24/2023 访问量:387

问:

所以我在电话号码验证方面遇到了一些问题。

我遇到的错误:enter image description here

当我试图输入一些不是数字的东西时,就会发生这种情况。我需要防止这种情况发生。

我已经尝试了很多方法,但出于某种原因没有任何效果。你能告诉我我的错误在哪里吗?

我之前在模型(实体)中尝试过什么:

 #[ORM\Column(nullable: true)]
   1) // #[Assert\Regex('/^\(0\)[0-9]*$')]
or 2) // #[Assert\Type(
    //     type: 'integer',
    //     message: 'The value {{ value }} is not a valid {{ type }}.',
    // )]
    private ?int $phone = null; 

我也在我的表格中尝试过:

->add('phone', TelType::class,[
        'required' => false,
        'constraints' => [
            new Regex([
                'pattern' => '/^\+?[0-9]{10,14}$/',
                'message' => 'Please enter a valid phone number',
            ])
        ],
        ])

验证器是导入的,正则表达式也,用于名称和电子邮件验证工作正常。只有电话号码有问题。

我的代码有什么问题?

先谢谢你!

symfony 验证 symfony-forms

评论

1赞 craigh 12/22/2022
表单输入是字符串。你断言它是一个整数,但事实并非如此。尝试而不是numericinteger
1赞 Dylan KAS 12/22/2022
正如 craigh 所说,您不能将电话号码存储为整数,它不是有效的整数,并且会被存储为显然不是您想要的。为什么不改用字符串,因为您的验证应该处理电话号码(如果键入,您还会存储字符)0960960+

答:

3赞 Brent 12/22/2022 #1

是您在属性上的键入提示导致了错误,就像 @craigh@Dylan KAS 提到的那样。 返回一个 ,因为它是 类型的输入元素,请参见此处$phoneTelTypestringtel

通过键入提示,PHP 期望提供的值为 null 或整数。假设您正在尝试无效的电话号码,例如“abcd”或“124578785758583”,Symfony将抛出一个错误,因为这些是字符串。?int

我建议将你的类型提示替换为并确保你的正则表达式是正确的,并检查类型“numeric”,它使用 is_numeric 函数:?string

#[ORM\Column(nullable: true)]
#[Assert\Regex('/^\(0\)[0-9]*$')]
#[Assert\Type(
    type: 'numeric',
    message: 'The value {{ value }} is not a valid {{ type }}.',
)]
private ?string $phone = null;