Files
intc-vue-h5/src/utils/validate.js

69 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 密码复杂度校验工具
*
* 规则(企业级高档位):
* 1. 长度为 8-20 个字符
* 2. 不能包含空格
* 3. 必须同时包含:大写字母、小写字母、数字、特殊字符 四类
*
* 注册与修改密码共用,保证两处复杂度判断一致。
*/
// 密码长度范围
export const PASSWORD_MIN_LENGTH = 8
export const PASSWORD_MAX_LENGTH = 20
// 四类字符检测
const REG_UPPER = /[A-Z]/
const REG_LOWER = /[a-z]/
const REG_NUMBER = /[0-9]/
// 特殊字符:常见符号集合(! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
const REG_SPECIAL = /[!-/:-@\[-`{-~]/
/**
* 校验密码复杂度
* @param {string} password 待校验的密码
* @returns {{ valid: boolean, message: string }} 校验结果与错误提示
*/
export function validatePassword(password) {
if (password === undefined || password === null || password === '') {
return { valid: false, message: '密码不能为空' }
}
const value = String(password)
if (value.length < PASSWORD_MIN_LENGTH || value.length > PASSWORD_MAX_LENGTH) {
return { valid: false, message: `密码长度在 ${PASSWORD_MIN_LENGTH}${PASSWORD_MAX_LENGTH} 个字符` }
}
if (/\s/.test(value)) {
return { valid: false, message: '密码不能包含空格' }
}
// 必须同时包含大写字母、小写字母、数字、特殊字符
if (!REG_UPPER.test(value)) {
return { valid: false, message: '密码必须包含大写字母' }
}
if (!REG_LOWER.test(value)) {
return { valid: false, message: '密码必须包含小写字母' }
}
if (!REG_NUMBER.test(value)) {
return { valid: false, message: '密码必须包含数字' }
}
if (!REG_SPECIAL.test(value)) {
return { valid: false, message: '密码必须包含特殊字符' }
}
return { valid: true, message: '' }
}
/**
* uni-forms 自定义校验函数:校验密码复杂度
* 用法:
* { validateFunction: passwordComplexityValidator, errorMessage: '...' }
* 注意errorMessage 仅在 validateFunction 返回 false 时展示,
* 因此这里直接返回 validatePassword 的布尔结果,配合一个通用提示文案。
*
* @param {object} rule 规则对象(未使用)
* @param {string} value 当前输入值
* @returns {boolean} 是否通过校验
*/
export function passwordComplexityValidator(rule, value) {
return validatePassword(value).valid
}