具有Symfony中的Length属性的Constrait数字类型?

时间:2019-06-03 19:35:20

标签: symfony

为了避免某些正则表达式或代码,具有属性长度的数字类型是否有任何约束?

https://symfony.com/doc/current/reference/constraints.html

例如,在我需要检查表单字段中的数字介于10到20之间的情况下,是否有本机允许这样做?

我想数字类型的正确方法是长度或范围比较约束。

这是我在表单中使用的棘手代码(无实体):

->add('phone', TextType::class, array(
    'constraints' => new Regex(['pattern' => '/^([0-9]{9,12}+)$/']),
    'label' => false, 
    'required' => 'required', 
    'attr' => array('class' => 'form-control form-control-lg validate')
))

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

$min = 9;
$max = 12;

->add('phone', NumberType::class, array(
    'constraints' => new Range([
        'min' => 10 ** ($min - 1),
        'max' => (10 ** $max) - 1,
        'minMessage' => "You need to enter at least $min characters",
        'maxMessage' => "You need to enter no more than $max characters"
    ]),
    'label' => false, 
    'required' => 'required', 
    'attr' => array('class' => 'form-control form-control-lg validate')
))

这会使用最小的9位数字和最大的12位数字作为边界来检查数字长度在9到12个字符(含)之间。

尽管在将电话号码作为号码类型处理时要小心,通常使用字符串代替它更容易出错。由于您不需要使用电话号码进行计算,因此可以使用字符串。如果使用整数,则不能支持特殊字符,例如“ +”,“ /”和“-”。您还冒着溢出的风险。