在Laravel中验证2的幂

时间:2019-02-10 07:51:52

标签: php validation laravel-5 between

如何验证1到1000之间的数字(它们是2的幂)?

public function rules()
{
  return [
   'threshold' => 'required'|between:1,1000|power??
  ];
}

2 个答案:

答案 0 :(得分:2)

您可以在验证中使用闭包:

public function rules()
    {
        return [
            'threshold' => [
                'required',
                'between:1,1000',
                function ($attribute, $value, $fail) {
                    if ($value == 0 || ($value & ($value - 1)) != 0) {
                        $fail($attribute . ' is not power of 2!');
                    }
                },
            ]
        ];
    }

请参阅laravel文档=> Validation

答案 1 :(得分:1)

您可以为此创建一个新的Rule object

例如:

class PowerOfTwo implements Illuminate\Contracts\Validation\Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return ($value & ($value - 1)) == 0;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute must be a power of 2.';
    }
}

要使用上述规则,您需要执行以下操作:

$data = [
    'threshold' => 256  
];

$rules = [
    'threshold' => ['required', 'integer', 'between:1,1000', new PowerOfTwo]
];

$validator = Validator::make($data, $rules);     

如果要测试数字在1到1000之间,还需要添加integer规则。

这是一个example,可以玩。