Files
uniapp-im-shop/utils/validate.js
2026-01-27 16:53:39 +08:00

127 lines
3.9 KiB
JavaScript
Raw Permalink 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.
// 正则
/** 手机号正则(中国大陆) */
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: '' }
}