Laravel自定义表单验证规则,添加验证规则

 Laravel  2020-05-03  admin  3627  4896

Laravel 提供了许多有用的验证规则;同时也支持自定义规则。在服务容器中使用注册自定义验证规则:

Laravel 自定义规则实现手机号、身份证号、密码强度的验证

  1. 定义验证规则,在创建文件app\Providers\Traits\ValidatorTrait.php

<?php

namespace App\Providers\Traits;

use Illuminate\Support\Facades\Validator;

trait ValidatorTrait
{

    public function validatorBoot()
    {

        //扩展验证规则
        //验证手机号
        Validator::extend('phone', function ($attribute, $value, $parameters, $validator) {
            $pattern = '/^1[3456789]{1}\d{9}$/';
            $res = preg_match($pattern, $value);

            return $res > 0;
        });
        Validator::replacer('phone', function ($message, $attribute, $rule, $parameters) {
            return $message;
            //return str_replace($attribute,$rule,$message);
        });

        //验证身份证号
        Validator::extend('identityCard', function ($attribute, $value, $parameters, $validator) {
            return $this->checkIdentityCard($value);
        });
        Validator::replacer('identityCard', function ($message, $attribute, $rule, $parameters) {
            return $message;
            //return str_replace($attribute,$rule,$message);
        });

        //验证密码长度及强度.三个参数:最小长度,最大长度,密码强度1-4
        Validator::extend('myPassword', function ($attribute, $value, $parameters, $validator) {
            return $this->checkPassword($value, $parameters);
        });
        Validator::replacer('myPassword', function ($message, $attribute, $rule, $parameters) {
            return $message;
        });

    }

    /**
     * 验证身份证
     * @param $idCard
     * @return bool
     * @author code.cent123.com
     * @date 2020/5/1
     */
    public static function checkIdentityCard($idCard)
    {
        // 只能是18位
        if (strlen($idCard) != 18) {
            return false;
        }
        // 取出本体码
        $idcard_base = substr($idCard, 0, 17);
        // 取出校验码
        $verify_code = substr($idCard, 17, 1);
        // 加权因子
        $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
        // 校验码对应值
        $verify_code_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
        // 根据前17位计算校验码
        $total = 0;
        for ($i = 0; $i < 17; $i++) {
            $total += substr($idcard_base, $i, 1) * $factor[$i];
        }
        // 取模
        $mod = $total % 11;
        // 比较校验码
        if ($verify_code == $verify_code_list[$mod]) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 验证密码
     * @param $password
     * @param $parameters
     * @return bool
     * @author code.cent123.com
     * @date 2020/5/1
     */
    public static function checkPassword($password, $parameters)
    {
        $pwd_len = strlen($password);
        if ($pwd_len > $parameters[1] || $pwd_len < $parameters[0]) {
            return false;
        }
        //1) 是否包含小写字母
        $pattern = '/[a-z]+/';
        $res = preg_match($pattern, $password);
        //2) 是否包含大写字母
        $pattern = '/[A-Z]+/';
        $res2 = preg_match($pattern, $password);
        //3) 是否包含数字
        $pattern = '/\d+/';
        $res3 = preg_match($pattern, $password);
        //4) 是否包含特殊符号
        $pattern = '/[\!\@\#\$\%\^\&\*\(\)\_\+\-\=\;\:\"\'\|\\\<\>\?\/\.\,\`\~]+/';
        $res4 = preg_match($pattern, $password);

        $sum = $res + $res2 + $res3 + $res4;
        return $sum >= $parameters[2];
    }

}

    2.在app\Providers\AppServiceProvider.php引入Trait

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;

class AppServiceProvider extends ServiceProvider
{
    use \App\Providers\Traits\ValidatorTrait;

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        Schema::defaultStringLength(191);
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //扩展验证规则 code.cent123.com
        $this->validatorBoot();
    }

}

    3.语言文件resources\lang\zh-CN\validation.php 注意驼峰命名和下划线的转换

//自定义验证规则  code.cent123.com
'phone' => ':attribute 不符合规范',
'identity_card' => ':attribute 不符合要求',
'my_password' => ':attribute 不符合要求',

    4.使用,可以和Laravel的验证规则一起

$rules = [
    'user_name' => 'required|bewteen:4,8',
    'user_password' => 'required|myPassword:6,16,2',
    'user_phone' => 'required|phone',
    'user_identityCard' => 'identityCard',
];


如果文章对您有帮助,点击下方的广告,支持一下作者吧!

相关推荐


Systemd Web 管理系统:简化服务管理

# Systemd Web Systemd Web 是一个 Systemd 的 Web UI 管理系统,通过直观的界面和易用的操作,让用户能够轻松地管理 Linux 系统和服务。该项目旨在简化 Systemd 的使用,使得无论是专业的系统管理员还是普通的用户,都能够方便地对系统进行操作。 ## [github地址] (https://github.com/topascend/systemd

laravel 自定义写入日志

laravel 自定义写入日志if(!function_exists(&#39;myLog&#39;)){ /** *生成自定义文件日志内容 *@param$data *@paramstring$title *@parambool$isClear *@returnvoid *@Author:cent123.com */ functionmyLog($data,string$tit

systemctl 使用

Systemd是Linux系统工具,用来启动守护进程,已成为大多数发行版的标准配置。而systemctl是Systemd的主命令,用于管理系统。其实我们大部分服务都有使用systemctl管理,比如MySQL、Nginx等等。常见配置如下:[Unit] #单元描述 Description=GFAPP #在什么服务启动之后再执行本程序 After=mysql.service [Serv

封装 laravel 的公共队列,延迟处理任务

封装 laravel 的公共队列,延迟处理任务&lt;?php /** *ThisfileispartofLunanShopTeam. *http://code.cent123.com/ *@authorhttp://code.cent123.com/view/387 */ namespaceApp\Jobs; useException; useIlluminate\B