首页 > 其他分享 >pattern和validator自定义校验规则

pattern和validator自定义校验规则

时间:2024-02-07 10:35:19浏览次数:24  
标签:自定义 rules pattern value callback validator message true

data(){ const checkNum = (rule, value, callback) => {       if (value || value === 0) {         if (value < 1 || value > 99) {           return callback(new Error('次数取值范围1~99'))         }         if (!Number.isInteger(Number(value))) {           return callback(new Error('请输入正整数'))         }       }       if (!value) {         return callback(new Error('必填字段'))       }       callback()     } } rules:{ //pattern自定义正则表达式校验 day: [           { required: true, message: '请输入', trigger: 'blur' },      {max:20,message:'不能超过20个字符'},           { pattern: /^(0|\+?[1-9][0-9]*)$/, message: '请输入正整数' },         ], price: [           { required: true, validator: checkNum, type: 'number', trigger: 'blur' }         ], }

一、使用pattern进行校验

定义的时候直接在pattern中定义正则即可,这里还可以这样写:new RegExp(/^[0-9a-zA-Z_]{1,}$/,'g')

<Form.Item label="登录名">
    {getFieldDecorator('loginname', {
        rules: [
            { required: true, message: '请输入登录名' },
            { max:20,message:'名称不得超过20个字符'},
            { pattern:new RegExp('^[0-9a-zA-Z_]{1,}$','g'),message:'只允许包含数字、字母、下划线'}],
            validateFirst:true
    })(<Input autoComplete="off" />)}
</Form.Item>

这种方式时比较简单的方式,可以处理简单的逻辑判断。

很多时候我们的表单项需要多次使用同样的校验规则以及校验message,所以最好呢就是将公用多次使用的校验正则封装起来,这样可以避免每次写很多东西,同时有利于集中修改。

封装pattern.js:

//正则校验的正则表达式,这里注意正则表达式中的‘\’要使用‘\\’转义
const patterns = {
    "name":"^[a-zA-Z_][0-9a-zA-Z_]{0,}$",
    "tel":"^1[2-9]\\d{0,}$",
    "email":"^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$",
    "pwd":"^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)]|[\\(\\)])+$)([^(0-9a-zA-Z)]|[\\(\\)]|[a-z]|[A-Z]|[0-9]){8,}$",
    "IP":"^(?=(\\b|\\D))(((\\d{1,2})|(1\\d{1,2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{1,2})|(2[0-4]\\d)|(25[0-5]))(?=(\\b|\\D))$",
    "IDCard":"(^\\d{15}$)|(^\\d{17}([0-9]|X)$)"
}
 
 
//对应正则表达式的提示信息
const patternMsg = {
    "name":"请以字母、下划线开头并包括数字、字母、下划线组成",
    "tel":"非正确的号码",
    "email":"非正确的邮箱地址",
    "pwd":"密码至少由8位包含字母、数字、特殊字符两种组合",
    "IP":"非正确IP地址",
    "IDCard":"非正确身份证号码"
}
 
//根据使用的正则返回对应的正则和信息对象
const pattern = (name,para='g') =>{
    return {
        pattern:new RegExp(patterns[name],para),
        message:patternMsg[name]
    }
} 
 
export default pattern;

使用pattern方法:

<Form.Item label="登录名">
    {getFieldDecorator('loginname', {
        rules: [
            { required: true, message: '请输入登录名' },
            { max:20,message:'名称不得超过20个字符'},
            pattern('name')],
        validateFirst:true
    })(<Input autoComplete="off" />)}
</Form.Item>
<Form.Item label="用户密码">
    {getFieldDecorator('loginpass', {
        rules: [{ required: true, message: '请输入密码' },
            pattern('pwd')],
        validateFirst:true
    })(<Input autoComplete="off" />)}
</Form.Item>

二、使用validator方法进行校验:

<Form.Item label="用户密码">
    {getFieldDecorator('loginpass', {
        rules: [{ required: true, message: 'Please input your note!' },{
            validator:(rules,value,callback)=>{this.handleCheckPwd(rules,value,callback)}
        }],
        validateFirst:true
    })(<Input autoComplete="off" />)}
</Form.Item>
<Form.Item label="确认密码">
    {getFieldDecorator('cfmloginpass', {
        rules: [{ required: true, message: 'Please input your note!' },{
            validator:(rules,value,callback)=>{this.handleCfmPwd(rules,value,callback)}
        }],
        validateFirst:true
    })(<Input autoComplete="off" />)}
</Form.Item>
    //新密码一致校验
    handleCheckPwd(rules,value,callback){
        let cfmPwd = this.props.form.getFieldValue('cfmloginpass');
        if(cfmPwd && cfmPwd !== value){
            callback(new Error('两次密码输入不一致'))
        }else{
            callback();
        }
    }
 
    //确认密码校验一致
    handleCfmPwd(rules,value,callback){
        let loginpass = this.props.form.getFieldValue('loginpass');
        if(loginpass && loginpass !== value){
            callback(new Error('两次密码输入不一致'))
        }else{
            callback();
        }
    }

这种方法可以校验比较复杂的逻辑处理,比如两次密码值的相互对比等等。

 

 

标签:自定义,rules,pattern,value,callback,validator,message,true
From: https://www.cnblogs.com/hellofangfang/p/18010697

相关文章

  • 记录一次Electron程序打包自定义安装包
    首先下载nsNiuNiu打包程序下面就是下载之后解压的文件夹内容,注明了主要文件/文件夹的用途将使用electron-builder打包的文件内容拷贝到FilesToInstall,也就是文件夹下面的内容拷贝过去修改.\SetupScripts\nim\nim_setup.nsi中的内容,这个文件是nsis的打包主文件,在其中设......
  • app.json 中未定义自定义编译中指定的启动页面
    换了启动页,这里得手动改。。。。。。。。。。。[app.json或自定义编译条件错误]app.json中未定义自定义编译中指定的启动页面./pages/index/index(env:Windows),......
  • 固定表结构与可自定义表结构
    整个平台的表结构分为两种:固定的和可自定义的。固定表结构适合于比较固定的信息对象,例如在平台的客户关系管理模块中,尽管各个行业有所差异,但是大同小异,可以固化表结构,使用实体来映射表。对象的编辑界面也是固定的,比较简单。 可自定义的表结构使用于灵活的数据对象,例如平台的人力资......
  • Leaflet 实现自定义瓦片实现xyz信息和边框绘制到瓦片上
    Leaflet实现自定义瓦片的渲染,将一些信息和边框绘制到瓦片上。主要作用是创建一个Canvas元素作为Leaflet的瓦片,并在Canvas上绘制一些文本信息和边框。实现步骤:创建一个Canvas元素作为Leaflet的瓦片,并获取其2D绘图上下文。设置Canvas的大小为当前瓦片的大小。......
  • 代码手术刀-自定义你的代码重构工具
    前言笔者近日在做代码仓库的存量代码缩减工作,首先考虑的是基于静态扫描的缩减,尝试使用了很多工具来对代码进行优化,例如PMD、IDEA自带的inspect功能、findBugs等。但是无一例外,要么过于“保守”,只给出扫描结果,但是无法实现一键优化,要么直接就是有bug(这里特指IDEA2023.1.5专业版-in......
  • 代码手术刀-自定义你的代码重构工具
    前言笔者近日在做代码仓库的存量代码缩减工作,首先考虑的是基于静态扫描的缩减,尝试使用了很多工具来对代码进行优化,例如PMD、IDEA自带的inspect功能、findBugs等。但是无一例外,要么过于“保守”,只给出扫描结果,但是无法实现一键优化,要么直接就是有bug(这里特指IDEA2023.1.5专业版-insp......
  • 设计模式(Design Pattern)
    目录设计模式(DesignPattern)面向对象设计原则创建型模式结构型模式行为型模式设计模式(DesignPattern)概念与定义是一套被反复使用的、多数人知晓的、经过分类编目的代码设计经验的总结。设计模式(DesignPattern)是一种对于软件系统中不断重现的设计问题的解决方案进行......
  • MFC 自定义消息
    ▲Demo示例新建基于对话框的Demo程序。头文件://自定义数据类型,用来测试消息数据传递typedefstructtagStudent{CStringName;intAge;}Student_t;//Dlgheaderpublic:afx_msgvoidOnBnClickedButtonCustomMsg();afx_msgLRESULTOnCusto......
  • APP在申请敏感权限时,应同步说明权限申请的使用目的,包括但不限于申请权限的名称、服务
    一、概述华为APP应用市场反馈问题:(目前是华为审核特有的问题)APP在申请敏感权限时,应同步说明权限申请的使用目的,包括但不限于申请权限的名称、服务的具体功能、用途;告知方式不限于弹窗、蒙层、浮窗、或者自定义操作系统权限弹框等验证了小米、vivo、oppo、应用宝,只......
  • mysql-自定义函数
    0、结构delimiter$$--修改语句结束符,mysql默认的结束符是分号,为了在函数体中避免遇到分号就结束,重新定义结束符createfunction函数名(形参)returns返回值类型begin//函数体return返回值数据;end$$delimiter;--将语句结束符修改回来1、变......