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

问题描述 投票:0回答:1

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

我的错误:

当我尝试输入非数字的内容时,就会发生这种情况。我需要阻止这种情况发生。

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

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

 #[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 validation symfony-forms
1个回答
3
投票

是您对

$phone
属性的打字提示导致了错误,就像 @craigh@Dylan KAS 提到的那样。
TelType
返回
string
,因为它是
tel
类型的输入元素,请参阅 here

通过输入提示

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

我建议用

?string
替换您的打字提示,并确保您的正则表达式正确,并检查类型“numeric”,它使用 is_numeric 函数:

#[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; 
© www.soinside.com 2019 - 2024. All rights reserved.