preg_match():没有结束分隔符' /'找到了Laravel

时间:2017-11-01 18:07:59

标签: php laravel laravel-5 laravel-5.2 laravel-5.1

我正在通过正则表达式对请求进行验证,此验证是检查发送的参数是否为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() !== '';
        }

3 个答案:

答案 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',
    ];

另外说实话,当我查看你的代码时,我没有看到错误。你确定错误与那两个正则表达式有关吗?