我正在通过正则表达式对请求进行验证,此验证是检查发送的参数是否为IP。
我的规则如下:
<?php
namespace App\Http\Requests\usuarios;
use Illuminate\Foundation\Http\FormRequest;
class storeVPN extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'segmentwan' => 'regex:/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/',
'segmentlan' => 'regex:/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/',
];
}
调试器向我显示错误在此行
调试器向我显示错误在此行
return preg_match($parameters[0], $value) > 0;
y el error completo es el siguiente
* @return bool
*/
public function validateRegex($attribute, $value, $parameters)
{
if (! is_string($value) && ! is_numeric($value)) {
return false;
}
$this->requireParameterCount(1, $parameters, 'regex');
return preg_match($parameters[0], $value) > 0;
}
/**
* Validate that a required attribute exists.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function validateRequired($attribute, $value)
{
if (is_null($value)) {
return false;
} elseif (is_string($value) && trim($value) === '') {
return false;
} elseif ((is_array($value) || $value instanceof Countable) && count($value) < 1) {
return false;
} elseif ($value instanceof File) {
return (string) $value->getPath() !== '';
}
答案 0 :(得分:0)
更改您的验证规则。当您使用正则表达式时,您需要使用数组而不是管道分隔符。
return [
'segmentwan' => [ 'regex:/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/'],
'segmentlan' => [ 'regex:/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/'],
];
注意:使用正则表达式时,可能需要指定 数组中的规则而不是使用管道分隔符,尤其是在 正则表达式包含管道符。
<强>更新强>
如果您要验证IP地址,则laravel提供三种验证选项。
<强> IP 强> 验证字段必须是IP地址。
<强>的IPv4:强> 验证字段必须是IPv4地址。
<强>的IPv6:强> 验证字段必须是IPv6地址。
答案 1 :(得分:0)
您不应该使用正则表达式来验证IP;您可以使用filter_var()
内置函数
它有许多标志,包括FILTER_FLAG_IPV4
用于ipv4&amp; FILTER_FLAG_IPV6
用于ipv6 ...当然你可以混合标志,这样你就可以检查两者
答案 2 :(得分:0)
在Laravel中,您有ip验证规则,因此您可以使用:
return [
'segmentwan' => 'ip',
'segmentlan' => 'ip',
];
另外说实话,当我查看你的代码时,我没有看到错误。你确定错误与那两个正则表达式有关吗?