把这里的验证部分 单独封装一下会不会更好一些
来源: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啊
00 -
张轩
2020-10-17
同学你好 完全可以啊 你可以把所有的验证的逻辑都抽离成一个函数 这样是另外一个纬度的封装 挺好滴
00
相似问题