把这里的验证部分 单独封装一下会不会更好一些

来源:5-3 ValidateInput 第二部分 —抽象验证规则

慕莱坞0998854

2020-10-16

老师在写这个组件的时候 把验证的逻辑也写在了组件里面 把它单独拿出来会不会好一点?

	//  utils/validation.ts

	export type ValidationKey = "email" | "phone" | "required";


	type Validation = Record<ValidationKey, (param: string) => boolean>;

	// 正则部分都是在网上搜的 写这些正则的真的都是神
	const emailReg = /([-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|"([]!#-[^-~ \t]|(\\[\t -~]))+")@[0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?(\.[0-9A-Za-z]([0-9A-Za-z-]{0,61}[0-9A-Za-z])?)+/;
	
	const phoneReg = /^(?:\+?86)?1(?:3\d{3}|5[^4\D]\d{2}|8\d{3}|7(?:[0-35-9]\d{2}|4(?:0\d|1[0-2]|9\d))|9[0-35-9]\d{2}|6[2567]\d{2}|4(?:(?:10|4[01])\d{3}|[68]\d{4}|[579]\d{2}))\d{6}$/;
	
	export const validation: Validation = {
	  email(str) {
	    return emailReg.test(str);
	  },
	  phone(str) {
	    return phoneReg.test(str);
	  },
	  required(str) {
	    return !!str.trim();
	  }
	};

使用的时候为

		// ValidateInput.vue
		
		import { validation, ValidationKey } from "../utils/validation";
		interface RuleProp {
		  type: ValidationKey;
		  errorMessage: string;
		}
		
	    const validateInput = () => {
	      if (props.rules) {
	        for (const rule of props.rules) {
	          if (!validation[rule.type](inputRef.val)) {
	            inputRef.error = true;
	            inputRef.errorMessage = rule.errorMessage;
	            break;
	          }
	        }
	     }
	
写回答

2回答

雨花凉

2020-10-21

老哥666啊

0
0

张轩

2020-10-17

同学你好 完全可以啊 你可以把所有的验证的逻辑都抽离成一个函数 这样是另外一个纬度的封装 挺好滴

0
0

Vue3 + TS 仿知乎专栏企业级项目

带你完成前后端分离复杂项目,率先掌握 vue3 造轮子技能

3142 学习 · 2313 问题

查看课程