/** * 数据验证工具 * * 功能:验证用户输入的数据格式是否正确 */ /** * 验证邮箱格式 * @param {string} email - 邮箱地址 * @returns {boolean} 是否有效 */ const validateEmail = (email) => { // 正则表达式:匹配标准邮箱格式 const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(email); }; /** * 验证中国大陆手机号 * @param {string} phone - 手机号 * @returns {boolean} 是否有效 */ const validatePhone = (phone) => { // 正则表达式:1开头,第二位是3-9,后面9位数字 const phoneRegex = /^1[3-9]\d{9}$/; return phoneRegex.test(phone); }; /** * 验证必填项 * @param {*} value - 要验证的值 * @param {string} fieldName - 字段名称 * @returns {object} { valid: boolean, message: string } */ const validateRequired = (value, fieldName = '该字段') => { if (value === null || value === undefined || value === '') { return { valid: false, message: `${fieldName}不能为空` }; } return { valid: true, message: '' }; }; /** * 验证密码强度 * @param {string} password - 密码 * @returns {object} { valid: boolean, message: string } * * 要求:至少6位,包含字母和数字 */ const validatePassword = (password) => { if (!password || password.length < 6) { return { valid: false, message: '密码长度至少6位' }; } // 至少包含一个字母和一个数字 const hasLetter = /[a-zA-Z]/.test(password); const hasNumber = /\d/.test(password); if (!hasLetter || !hasNumber) { return { valid: false, message: '密码必须包含字母和数字' }; } return { valid: true, message: '' }; }; /** * 验证用户名 * @param {string} username - 用户名 * @returns {object} { valid: boolean, message: string } * * 要求:3-20位,只能包含字母、数字、下划线 */ const validateUsername = (username) => { if (!username || username.length < 3 || username.length > 20) { return { valid: false, message: '用户名长度应为3-20位' }; } const usernameRegex = /^[a-zA-Z0-9_]+$/; if (!usernameRegex.test(username)) { return { valid: false, message: '用户名只能包含字母、数字和下划线' }; } return { valid: true, message: '' }; }; /** * 验证数字范围 * @param {number} value - 数值 * @param {number} min - 最小值 * @param {number} max - 最大值 * @param {string} fieldName - 字段名称 * @returns {object} { valid: boolean, message: string } */ const validateNumberRange = (value, min, max, fieldName = '该值') => { const num = Number(value); if (isNaN(num)) { return { valid: false, message: `${fieldName}必须是数字` }; } if (num < min || num > max) { return { valid: false, message: `${fieldName}应在${min}-${max}之间` }; } return { valid: true, message: '' }; }; /** * 批量验证 * @param {array} validations - 验证规则数组 * @returns {object} { valid: boolean, errors: array } * * 使用示例: * const result = validateBatch([ * validateRequired(username, '用户名'), * validateEmail(email, '邮箱') * ]); */ const validateBatch = (validations) => { const errors = validations .filter(v => !v.valid) .map(v => v.message); return { valid: errors.length === 0, errors }; }; // 导出所有函数 module.exports = { validateEmail, validatePhone, validateRequired, validatePassword, validateUsername, validateNumberRange, validateBatch };