vue3中,校验方法之身份证号脱敏、校验数字长度、特殊字符校验
效果
110344********2860 //身份证号脱敏
代码
身份证号脱敏
index.vue
import { idCardEncipher } from '@src/utils/jiaoyan'
row.idCard = idCardEncipher(row.idCard)
方法
src\utils\jiaoyan.ts
// 校验数字
export function validateNumberFun(rule: any, value: any, callback: any) {
if (value || rule.required) {
const v = value || ''
const pattern = /^[0-9]{1,8}$/
if (!pattern.test(v)) {
callback(new Error('请输入1-8位数字'))
} else {
callback()
}
} else {
callback()
}
}
// 路由地址
export function validateCommonPath(value: any, callback: any) {
const commonNoChars = '~!@#$%^&*()_+|}{":?><,.;' + '’[]\\=-` '
const noChars = commonNoChars
const v = value || ''
for (let i = 0; i < noChars.length; i++) {
const char = noChars[i]
if (v.indexOf(char) != -1) {
callback(new Error('不能使用字符:' + noChars))
return
}
}
}
//特殊字符校验
export function validateCommonText(value: any, callback: any) {
const commonNoChars = '~!@#$%^&*()_+|}{":?><,./;' + '’[]\\=-` '
const noChars = commonNoChars
const v = value || ''
for (let i = 0; i < noChars.length; i++) {
const char = noChars[i]
if (v.indexOf(char) != -1) {
callback(new Error('不能使用字符:' + noChars))
return
}
}
const words = ['null', 'NULL']
for (let i = 0; i < noChars.length; i++) {
const word = words[i]
if (v.indexOf(word) != -1) {
callback(new Error('不能包含: ' + word))
return
}
}
callback()
}
//校验数字12位字符
export function validateNumberTW(rule: any, value: any, callback: any) {
if (value || rule.required) {
const v = value || ''
const pattern = /^[0-9]{1,12}$/
if (!pattern.test(v)) {
callback(new Error('请输入1-12位数字'))
} else {
callback()
}
} else {
callback()
}
}
// 自定义校验销售组织不能为空
export function validateNull(rule: any, value: any, callback: any) {
if (value || rule.required) {
const v = value || ''
const len = String(v).length
if (len == 2) {
callback(new Error('销售组织不能为空'))
} else {
callback()
}
} else {
callback()
}
}
// 金额小数点
export function validateNumberF(rule: any, value: any, callback: any) {
if (value || rule.required) {
const v = value || ''
const len = String(v).length
// const pattern = /(^[1-9]{1}[0-9]*$)|(^[0-9]*\.[0-9]{2}$)/
if (!len || len > 15) {
callback(new Error('请输入1-15位数字'))
} else if (!/^\d+([.]+\d{1,2})?$/.test(v)) {
callback(new Error('请输入正确金额'))
} else {
callback()
}
} else {
callback()
}
}
export function validateNumberCharacters(rule: any, value: any, callback: any) {
if (value || rule.required) {
const v = value || ''
const pattern = /^[0-9a-zA-Z]*$/
if (!pattern.test(v)) {
callback(new Error('请输入字母+数字组合'))
} else {
callback()
}
} else {
callback()
}
}
//身份证号脱敏
export const idCardEncipher = (idCard) => {
const reg = /^(.{6})(?:\d+)(.{4}$)/
const maskedIdCard = idCard.replace(reg,'\$1******\$2')
return maskedIdCard
}
特殊字符校验
index.vue
<el-form-item
label="项目名称:"
prop="item_name"
:rules="[
{
validator: validateCommonText,
trigger: ['blur', 'change'],
},
]"
>
<el-input
v-model="formInline.item_name"
maxlength="100"
placeholder="请输入"
/>
</el-form-item>
<script>
import { validateCommonText } from '@src/utils/validate'
</script>
src\utils\validate.ts
/**
* 中文 + 字母 + 数字 + "-" 的组合
* @param {*} rule
* @param {*} value
* @param {*} callback
*/
export function validateRoleRuler(rule: any, value: any, callback: any) {
const v = value || ''
const commonNoChars = '~!@#$%^&*()+|}{":?><,./;' + '’[]\\=` '
const pattern = /[~!@#$%^&*()_+|}{":?><,./\\;'[\]=` 、]|([Nn][Uu][Ll][Ll])/
if (pattern.test(v)) {
callback(new Error('不能使用' + commonNoChars))
return
}
callback()
}
/**
* @description 特定字符校验
* @param value
* @returns {boolean}
*/
export function validateCommonText(rule: any, value: any, callback: any) {
const commonNoChars = '~!@#$%^&*()+|}{":?><,./;' + '_’[]\\=-` '
const noChars = commonNoChars
const v = value || ''
for (let i = 0; i < noChars.length; i++) {
const char = noChars[i]
if (v.indexOf(char) != -1) {
// callback(new Error('不能使用字符:' + noChars))
callback(new Error('不能使用特殊字符'))
return
}
}