在Laravel中自定义验证功能
问题描述:
我很好奇($value & ($value - 1)) != 0
在下面的验证中它如何工作才能知道数字是2的幂?!
I am curious about ($value & ($value - 1)) != 0
that how it is working in below validation to know number is power of 2?!
function ($attribute, $value, $fail) {
if ($value == 0 || ($value & ($value - 1)) != 0) {
$fail($attribute . ' is not power of 2!');
}
}
如果我想获得除2的幂之外的2的幂之间的数字,我该怎么办?我可以使用和修改此命令吗? (例如数字:1,2,3,4,6,8,12,16,...)
If I would like get numbers between numbers of power 2 in addition to power 2 numbers, what shall I do? can I use and modify this command? (e.g. numbers: 1,2,3,4,6,8,12,16,...)
答
我解决了算法.我为算法创建了一个规则对象:
I Solved the algorithm. I created a Rule Object for my algorithm:
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class DoubleThreshold implements Rule
{
public function passes($attribute, $value)
{
$issue = floor(log($value, 2));
$power1 = pow(2, $issue);
$power2 = pow(2, $issue - 1);
$power3 = $power1 + $power2;
if ($value == 1 || $value == $power1 || $value == $power2 || $value == $power3)
return true;
return false;
}
public function message()
{
return 'The :attribute is not in consider numbers!';
}
}
要使用上述规则,我做了这样的事情:
To use the above rule, I did something like this:
public function rules()
{
return [
'threshold' => ['required', 'between:1,1000', new DoubleThreshold]
];
}