动态校验自定义指令
实例
/**
* 是否身份证号码
* @date 2023-6-17
* @author gmy
* @param {any} rule
* @param {any} value
* @param {any} callback
* @returns {any}
*/
export function validateIdNo(rule, value, callback) {
// const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
const reg = /^[1-9]\d{5}(18|19|20)\d{2}(0\d|1[0-2])([0-2]\d|3[01])\d{3}(\d|X)$/
if (value === '' || value === undefined || value == null) {
callback()
} else {
if ((!reg.test(value)) && value !== '') {
callback(new Error('请输入正确的身份证号码'))
} else {
// 校验身份证号码的校验码
const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
let checkSum = 0;
for (let i = 0; i < 17; i++) {
checkSum += parseInt(value.toString().charAt(i)) * factor[i];
}
var remainder = checkSum % 11;
var checkDigit = '10X98765432';
if (value.toString().charAt(17) !== checkDigit.charAt(remainder)) {
callback(new Error('请输入正确的身份证号码'))
}
callback()
}
}
}
/***
* 电话号和固话校验
* @author gmy
* @param {any} rule
* @param {any} value
* @param {any} callback
* @returns {any}
*/
//
export function checkTelPhone(rule, value, callback) {
const reg1 = /^1([38][0-9]|4[014-9]|[59][0-35-9]|6[2567]|7[0-8])\d{8}$/;
const reg2 = /^(?:(?:\d{3}-)?\d{8}|^(?:\d{4}-)?\d{7,8})(?:-\d+)?$/;
if (value === "" || !value) {
callback();
} else {
if (reg1.test(value) || reg2.test(value)) {
callback();
} else {
callback(new Error("请输入正确的电话或固话"));
}
}
}
/***
* 户口薄
* @author gmy
* @param {any} rule
* @param {any} value
* @param {any} callback
* @returns {any}
*/
export function checkHKBCard(rule, value, callback) {
const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
if (value === "" || !value) {
callback();
} else {
if (reg.test(value)) {
callback();
} else {
callback(new Error("请输入正确的户口薄号码"));
}
}
}
方法调用
import { validateIdNo } from "@/utils/validate";
validateIdNo:[{ required: true, validator: validateIdNo, trigger: "blur" }]