自定义验证规则 laravel

Custom rule for validation laravel

我制定了一个自定义规则来验证手机号码。有特定的模式和要求。

图案 [0-9]{3}-[0-9]{4}-[0-9]{4}

前三位数字应为以下数字之一:

010、020、030、040、050、060、070、080、090

下面是我的自定义规则代码。

App/Rules/MobileNumber.php

    public function passes($attribute, $value)
    {
        $pattern  = "/^\[0-9]{4}-[0-9]{4}-[0-9]{3}$/";
        return preg_match($pattern, $value);
    }

我的自定义验证器:

app/HTTP/Request/UserRequest.php

    use App\Rules\MobileNumber;
    ......
    //manipulate data before validation
    public function validationData()
    {
            $this->merge([
            'tel_number' =>  $this->tel_number_1.'-'. $this->tel_number_2.'-'.$this->tel_number_3,
        ]);
    }

    public function rules()
    {
        return [
            //other rules here....
            'mob_number' => 'required', new MobileNumber()
        ];
    }

但是使用上面的代码验证不起作用。tel_number 没有到达 passes 方法来检查验证。 I.E 如果用户提供字母字符或符号,它们将被转发用于数据库保存方法。

所以我无法检查我的正则表达式是否正确。

如果有人能指出我在这里犯的错误,那将非常有帮助。还要确认我的正则表达式是否正确以通过验证。

我只能回答正则表达式验证的最后一点。

您将实施中的顺序改为 4-4-3,而不是 3-4-4 位。

序列 010, 020, 030, 040, 050, 060, 070, 080, 090 可以使用 0[1-9]0 匹配,你不应该转义 \[ 否则你会匹配它从字面上看。

更新后的代码可能如下所示:

$pattern  = "/^0[1-9]0-\d{4}-\d{4}$/";