如何验证1到1000之间的数字(它们是2的幂)?
public function rules()
{
return [
'threshold' => 'required'|between:1,1000|power??
];
}
答案 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,可以玩。