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

5ktev3wc  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(146)

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

当我试着输入一些不是数字的东西时,就会发生这种情况。我需要防止这种情况。
我已经试过很多方法了,但不知什么原因都不起作用。你能告诉我我错在哪里吗?
我之前在模型(实体)中尝试了什么:

#[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',
            ])
        ],
        ])

验证器被导入,regex也是,名字和电子邮件验证工作正常。问题只是与电话号码。
我的代码有什么问题?
先谢谢你!

eufgjt7s

eufgjt7s1#

$phone属性的类型提示导致了这个错误,就像@craigh和@Dylan KAS提到的那样。TelType返回string,因为它是tel类型的输入元素,参见here
通过类型提示?int,PHP期望提供的值为null或整数。假设您尝试使用无效的电话号码,如'abcd'或'124578785758583',Symfony将抛出错误,因为这些是字符串。
我建议用?string替换你的typehinting,确保你的正则表达式是正确的,并检查类型“numeric”,它使用is_numeric函数:

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

相关问题