Php 验证Laravel中2个数字的幂
我如何验证1到1000之间的数字是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',
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,这是有效的!请不要在问题中修改答案。改为使用答案部分