Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 验证Laravel中2个数字的幂_Php_Validation_Laravel 5_Between - Fatal编程技术网

Php 验证Laravel中2个数字的幂

Php 验证Laravel中2个数字的幂,php,validation,laravel-5,between,Php,Validation,Laravel 5,Between,我如何验证1到1000之间的数字是2的幂 public function rules() { return [ 'threshold' => 'required'|between:1,1000|power?? ]; } 您可以在验证中使用闭包: public function rules() { return [ 'threshold' => [ 'required',

我如何验证1到1000之间的数字是2的幂

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

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

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 Documentation=>

您可以为此创建一个新文档

例如:

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之间,还需要添加
整数
规则


这是一个你可以玩的游戏

谢谢你的回复。我对
($value&($value-1))很好奇0
这就是它的工作原理?!如果你在二进制模式(1和0)中考虑数字,则数字为2的数字将是这样的(2=10, 4=100, 8=1000, 16=>10000…)和这些数字之前的数字(1=01, 3=>011, 7=>0111, 15=0111, 15)。因此,如果你对这个数字进行AND位运算(例如100&011(4和3)),答案将是0,所以。。。如a所述,如果给定值和值-1的结果仅等于0,则条件为真;如果你介意把你的答案寄到这里,请。谢谢你的回答。这非常有用。你的条件将在
zero
时返回true,这是有效的!请不要在问题中修改答案。改为使用答案部分