uniapp graceChecker.js 表单验证

1.新建文件 graceChecker.js

export default {
	error:'',
	check : function (data, rule){
		for(var i = 0; i < rule.length; i++){
			if (!rule[i].checkType){return true;}
			if (!rule[i].name) {return true;}
			if (!rule[i].errorMsg) {return true;}
			if (!data[rule[i].name]) {this.error = rule[i].errorMsg; return false;}
			switch (rule[i].checkType){
				case 'string':
					var reg = new RegExp('^.{' + rule[i].checkRule + '}$');
					if(!reg.test(data[rule[i].name])) {this.error = rule[i].errorMsg; return false;}
				break;
				case 'int':
					var reg = new RegExp('^(-[1-9]|[1-9])[0-9]{' + rule[i].checkRule + '}$');
					if(!reg.test(data[rule[i].name])) {this.error = rule[i].errorMsg; return false;}
					break;
				break;
				case 'between':
					if (!this.isNumber(data[rule[i].name])){
						this.error = rule[i].errorMsg;
						return false;
					}
					var minMax = rule[i].checkRule.split(',');
					minMax[0] = Number(minMax[0]);
					minMax[1] = Number(minMax[1]);
					if (data[rule[i].name] > minMax[1] || data[rule[i].name] < minMax[0]) {
						this.error = rule[i].errorMsg;
						return false;
					}
				break;
				case 'betweenD':
					var reg = /^-?[1-9][0-9]?$/;
					if (!reg.test(data[rule[i].name])) { this.error = rule[i].errorMsg; return false; }
					var minMax = rule[i].checkRule.split(',');
					minMax[0] = Number(minMax[0]);
					minMax[1] = Number(minMax[1]);
					if (data[rule[i].name] > minMax[1] || data[rule[i].name] < minMax[0]) {
						this.error = rule[i].errorMsg;
						return false;
					}
				break;
				case 'betweenF': 
					var reg = /^-?[0-9][0-9]?.+[0-9]+$/;
					if (!reg.test(data[rule[i].name])){this.error = rule[i].errorMsg; return false;}
					var minMax = rule[i].checkRule.split(',');
					minMax[0] = Number(minMax[0]);
					minMax[1] = Number(minMax[1]);
					if (data[rule[i].name] > minMax[1] || data[rule[i].name] < minMax[0]) {
						this.error = rule[i].errorMsg;
						return false;
					}
				break;
				case 'same':
					if (data[rule[i].name] != rule[i].checkRule) { this.error = rule[i].errorMsg; return false;}
				break;
				case 'notsame':
					if (data[rule[i].name] == rule[i].checkRule) { this.error = rule[i].errorMsg; return false; }
				break;
				case 'email':
					var reg = /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
					if (!reg.test(data[rule[i].name])) { this.error = rule[i].errorMsg; return false; }
				break;
				case 'phoneno':
					var reg = /^1[0-9]{10,10}$/;
					if (!reg.test(data[rule[i].name])) { this.error = rule[i].errorMsg; return false; }
				break;
				case 'zipcode':
					var reg = /^[0-9]{6}$/;
					if (!reg.test(data[rule[i].name])) { this.error = rule[i].errorMsg; return false; }
				break;
				case 'reg':
					var reg = new RegExp(rule[i].checkRule);
					if (!reg.test(data[rule[i].name])) { this.error = rule[i].errorMsg; return false; }
				break;
				case 'in':
					if(rule[i].checkRule.indexOf(data[rule[i].name]) == -1){
						this.error = rule[i].errorMsg; return false;
					}
				break;
				case 'notnull':
					if(data[rule[i].name] == null || data[rule[i].name].length < 1){this.error = rule[i].errorMsg; return false;}
				break;
				case 'idcard':
					if(data[rule[i].name].length < 15 || data[rule[i].name].length > 15 && data[rule[i].name].length < 18){this.error = rule[i].errorMsg; return false;}
					if (data[rule[i].name].length == 15 && !(/^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}$/.test(data[rule[i].name]))) {
						this.error = rule[i].errorMsg; return false;
					}else if(data[rule[i].name].length == 18 && !(/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(data[rule[i].name]))){
						this.error = rule[i].errorMsg; return false;
					}
				break;
				case 'address':
					var reg = /^[\u4e00-\u9fa5]/;
					if(!reg.test(data[rule[i].name])){
						this.error = rule[i].errorMsg; return false;
					}
				break;
			}
		}
		return true;
	},
	isNumber : function (checkVal){
		var reg = /^-?[1-9][0-9]?.?[0-9]*$/;
		return reg.test(checkVal);
	}
}

在原作者的基础上由加上了 idcard验证和address验证(实地地址的验证)

自定义定义rules:

let rules=[
	{
		name:'title',
		checkType: "string",
		checkRule: "1,30",
		errorMsg: "标题应为1-30个字符"
	}
]

 然后引入graceChecker.js

<script>
	import graceChecker from "../../../common/graceChecker.js"
	export default{
		data(){
			return{}
		},
		methods:{
			formSubmit(e){
				let type = this.declareJson.type
				let rules = [
	              {
		            name:'title',
		            checkType: "string",
		            checkRule: "1,30",
		            errorMsg: "项目标题应为1-30个字符"
	              }
                ]
				//进行表单检查
				var formData = e.detail.value;
				var checkRes = graceChecker.check(formData, rules);
				if (checkRes) {
					uni.showToast({
						title: "验证通过!",
						icon: "none"
					});
				} else {
					uni.showToast({
						title: graceChecker.error,
						icon: "none"
					});
				}
			}
		}
	}
</script>

这样就可以根据自定义的校验信息进行校验及提示


http://www.niftyadmin.cn/n/479044.html

相关文章

【STM32】F103 时钟树

STM32F103是一款基于ARM Cortex-M3内核的32位微控制器&#xff0c;它具有丰富的外设资源和灵活的时钟配置。本文将从以下几个方面介绍STM32F103的时钟树&#xff1a; 时钟树的概念和作用时钟树的组成和分类时钟树的配置方法和步骤时钟树的应用实例 一、时钟树的概念和作用二、时…

linux如何查找某进程的所在路径

先查找进程对应的pid ps anx|grep 要查询的进程关键字第一行为进程号,拿到进程号后 cd /proc/进程号该文件夹下 cwd 对应的软连接为 进程对应项目的绝对路径 exe 对应的软链接为 进程启动程序的绝对路径 原理&#xff1a; linux 在启动程序时&#xff0c;会在/proc 下启动一…

空气净化器语音播放方案,低功耗NV400F语音芯片

随着科技的不断进步和人们对生活质量的要求不断提高&#xff0c;空气净化器也逐步进入人们的日常生活中。而随着人工智能技术的发展&#xff0c;越来越多的家电设备开始具备语音交互的功能&#xff0c;极大地方便了用户的使用体验。在实现空气净化器的语音播放功能上&#xff0…

vim设置(vimrc)

我的vim设置 inoremap <C-h> <Left> inoremap <C-j> <Down> inoremap <C-k> <Up> inoremap <C-l> <Right> syntax on "自动语法高亮 :set nocursorline set nu " 显示行号 syntax on &quo…

adb-利用bat批处理文件,实现app运行截图,将截图以时间戳命名并保存到本地

目录 一、前言 二、脚本如下 三、其中 四、需要注意是 &#x1f381;更多干货 完整版文档下载方式&#xff1a; 一、前言 因为工作的需要&#xff0c;我要将安卓一体机上的运行图片截图保留做一个操作手册&#xff0c;但是我又不想在cmd里面一行一行的写命令&#xff0c;…

前端开发中的常见问题及解决方案

问题一&#xff1a;浏览器兼容性 在前端开发中&#xff0c;不同浏览器对于HTML、CSS和JavaScript的解析和渲染存在差异&#xff0c;导致页面在不同浏览器上显示效果不一致甚至出现错误。为了解决这个问题&#xff0c;我们可以采取以下方案&#xff1a; 使用CSS Reset&#xf…

Linux服务器Jenkins部署打包Flutter

程序猿日常 记Jenkins部署打包Flutter参考Linux服务器Jenkins部署打包Flutter 安装Flutter环境 Flutter SDK 下载地址 配置服务器Flutter环境变量 创建任务 #!/bin/bash -ilex source /etc/profileflutter clean flutter pub get flutter build apk

centos7 解决 IP自动变化的问题

进入&#xff1a;cd /etc/sysconfig/network-scripts/ 找到&#xff1a;ircfg-ens33 文件 vi 打开 BOOTPROTO“static” IPADDR192.168.98.130 //设置的本机ip&#xff0c;需和网关在同一网段 192.168.234.xxx NETMASK255.255.255.0 子网掩码 设置好后 :wq systemctl restart…