127 lines
3.9 KiB
JavaScript
127 lines
3.9 KiB
JavaScript
// 正则
|
||
|
||
/** 手机号正则(中国大陆) */
|
||
export const PHONE_REGEX = /^1[3-9]\d{9}$/
|
||
|
||
/** 邮箱正则 */
|
||
const EMAIL_REGEX = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
|
||
|
||
/** 身份证号(简化版) */
|
||
const ID_CARD_REGEX = /(^\d{15}$)|(^\d{18}$)|(^\d{17}[\dXx]$)/
|
||
|
||
/** 密码强度(至少8位,包含数字和字母) */
|
||
const PASSWORD_REGEX = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*#?&]{8,}$/
|
||
|
||
/** 交易密码(必须是6位数字) */
|
||
const TRANSACTION_PASSWORD_REGEX = /^\d{6}$/
|
||
|
||
/** 群号码(只能是数字,至少3位,最多11位)*/
|
||
const GROUP_NUMBER_REGEX = /^\d{3,11}$/
|
||
|
||
/**
|
||
* 校验手机号
|
||
* @param {string} phone - 待校验的手机号
|
||
* @returns {{ valid: boolean, message: string }}
|
||
*/
|
||
export const validatePhone = phone => {
|
||
if (!phone) return { valid: false, message: '手机号不能为空' }
|
||
if (!PHONE_REGEX.test(phone)) {
|
||
return { valid: false, message: '手机号格式不正确' }
|
||
}
|
||
return { valid: true, message: '' }
|
||
}
|
||
|
||
/**
|
||
* 校验邮箱
|
||
* @param {string} email - 待校验的邮箱
|
||
* @returns {{ valid: boolean, message: string }}
|
||
*/
|
||
export const validateEmail = email => {
|
||
if (!email) return { valid: false, message: '邮箱不能为空' }
|
||
if (!EMAIL_REGEX.test(email)) {
|
||
return { valid: false, message: '邮箱格式不正确' }
|
||
}
|
||
return { valid: true, message: '' }
|
||
}
|
||
|
||
/**
|
||
* 校验密码强度
|
||
* @param {string} password - 待校验的密码
|
||
* @returns {{ valid: boolean, message: string }}
|
||
*/
|
||
export const validatePassword = password => {
|
||
if (!password) return { valid: false, message: '密码不能为空' }
|
||
if (password.length < 8) {
|
||
return { valid: false, message: '密码长度不能少于8位' }
|
||
}
|
||
if (!PASSWORD_REGEX.test(password)) {
|
||
return { valid: false, message: '密码需包含字母和数字' }
|
||
}
|
||
return { valid: true, message: '' }
|
||
}
|
||
|
||
/**
|
||
* 校验确认密码是否与原密码一致
|
||
* @param {string} password - 原始密码
|
||
* @param {string} confirmPassword - 确认密码
|
||
* @returns {{ valid: boolean, message: string }}
|
||
*/
|
||
export function validateConfirmPassword(password, confirmPassword) {
|
||
if (!confirmPassword) {
|
||
return { valid: false, message: '请再次输入密码' }
|
||
}
|
||
if (password !== confirmPassword) {
|
||
return { valid: false, message: '两次输入的密码不一致' }
|
||
}
|
||
return { valid: true, message: '' }
|
||
}
|
||
|
||
/**
|
||
* 校验身份证号(仅格式校验,不验证真实性)
|
||
* @param {string} idCard - 待校验的身份证号
|
||
* @returns {{ valid: boolean, message: string }}
|
||
*/
|
||
export const validateIdCard = idCard => {
|
||
if (!idCard) return { valid: false, message: '身份证号不能为空' }
|
||
if (!ID_CARD_REGEX.test(idCard)) {
|
||
return { valid: false, message: '身份证号格式不正确' }
|
||
}
|
||
return { valid: true, message: '' }
|
||
}
|
||
|
||
/**
|
||
* 校验交易密码
|
||
* @param {string} password - 待校验的密码
|
||
* @returns {{ valid: boolean, message: string }}
|
||
*/
|
||
|
||
export const validateTransactionPassword = (password, name = '密码') => {
|
||
if (!password) return { valid: false, message: `${name}不能为空` }
|
||
if (password.length < 6) {
|
||
return { valid: false, message: `${name}长度不能少于6位` }
|
||
}
|
||
if (!TRANSACTION_PASSWORD_REGEX.test(password)) {
|
||
return { valid: false, message: `${name}必须是6位数字` }
|
||
}
|
||
return { valid: true, message: '' }
|
||
}
|
||
|
||
/**
|
||
* 校验群号码
|
||
* @param {string} groupNumber - 待校验的群号码
|
||
* @returns {{ valid: boolean, message: string }}
|
||
*/
|
||
export const validateGroupNumber = groupNumber => {
|
||
if (!groupNumber) return { valid: false, message: '群号码不能为空' }
|
||
if (groupNumber.length < 3) {
|
||
return { valid: false, message: '群号码长度不能少于3位' }
|
||
}
|
||
if (groupNumber.length > 11) {
|
||
return { valid: false, message: '群号码长度不能超过11位' }
|
||
}
|
||
if (!GROUP_NUMBER_REGEX.test(groupNumber)) {
|
||
return { valid: false, message: '群号码只能是数字' }
|
||
}
|
||
return { valid: true, message: '' }
|
||
}
|