AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
# 数据验证模块 数据验证模块提供了各种常用的数据验证功能,专为中文开发者优化,支持手机号、身份证、邮箱等多种数据类型的验证。 ## 引用方式 ### ES6 模块引用 ```javascript import sinma from 'sinmajs'; // 或者使用解构赋值 import { isPhone, isEmail, isIdCard } from 'sinmajs'; ``` ### CommonJS 引用 ```javascript const sinma = require('sinmajs'); ``` ### 浏览器直接引用 ```html <script src="https://unpkg.com/sinmajs@latest/dist/sinma.min.js"></script> <script> // 直接使用 sinma 对象 console.log(sinma.isPhone('13812345678')); </script> ``` ## API 列表 ### isPhone(value, strict) - 手机号验证 验证中国大陆手机号码格式。 #### 参数 - `value` {string} - 待验证的手机号 - `strict` {boolean} - 是否启用严格验证模式,默认 `false` #### 返回值 - {boolean} - 验证通过返回 `true`,否则返回 `false` #### 功能代码 ```javascript // 宽松验证:1开头,第二位3-9,总长11位 const phoneRegex = /^1[3-9]\d{9}$/; // 严格验证:精确匹配运营商号段 const phoneStrictRegex = /^((13[0-3])|(13[5-9])|(14(0|[5-7]|9))|(15([0-3]|[5-9]))|(16(2|[5-7]))|(17[0-8])|(18[0-9])|(19([0-3]|[5-9])))\d{8}$/; function isPhone(value, strict = false) { if (typeof value !== 'string') return false; return strict ? phoneStrictRegex.test(value) : phoneRegex.test(value); } ``` #### 使用方法 ```javascript // 宽松验证 sinma.isPhone('13812345678'); // true sinma.isPhone('12345678901'); // false // 严格验证(精确号段匹配) sinma.isPhone('13412345678', true); // false (134号段不支持) sinma.isPhone('13512345678', true); // true ``` #### 使用范例 ```javascript // 表单验证示例 function validatePhoneInput(phone) { if (!sinma.isPhone(phone)) { return { valid: false, message: '请输入正确的手机号码' }; } if (!sinma.isPhone(phone, true)) { return { valid: false, message: '该手机号码号段暂不支持' }; } return { valid: true, message: '验证通过' }; } // 实际应用 const result = validatePhoneInput('13812345678'); console.log(result); // { valid: true, message: '验证通过' } ``` --- ### isEmail(value) - 邮箱验证 验证邮箱地址格式是否正确。 #### 参数 - `value` {string} - 待验证的邮箱地址 #### 返回值 - {boolean} - 验证通过返回 `true`,否则返回 `false` #### 功能代码 ```javascript const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; function isEmail(value) { if (typeof value !== 'string') return false; return emailRegex.test(value); } ``` #### 使用方法 ```javascript sinma.isEmail('user@example.com'); // true sinma.isEmail('test@domain.co.uk'); // true sinma.isEmail('invalid-email'); // false sinma.isEmail('user@'); // false ``` #### 使用范例 ```javascript // 邮箱格式验证示例 function validateEmail(email) { if (!email) { return '邮箱地址不能为空'; } if (!sinma.isEmail(email)) { return '请输入正确的邮箱地址格式'; } return null; // 验证通过 } // 批量验证邮箱 const emails = ['user@test.com', 'invalid', 'admin@domain.org']; const results = emails.map(email => ({ email, valid: sinma.isEmail(email) })); console.log(results); // [ // { email: 'user@test.com', valid: true }, // { email: 'invalid', valid: false }, // { email: 'admin@domain.org', valid: true } // ] ``` --- ### isIdCard(value, strict) - 身份证验证 验证中国大陆居民身份证号码。 #### 参数 - `value` {string} - 待验证的身份证号 - `strict` {boolean} - 是否启用严格验证模式,默认 `false` #### 返回值 - {boolean} - 验证通过返回 `true`,否则返回 `false` #### 功能代码 ```javascript const idCardRegex = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/; function isIdCard(value, strict = false) { if (typeof value !== 'string') return false; if (!idCardRegex.test(value)) return false; if (strict) { return validateIdCard(value); // 严格验证包含校验位验证 } return true; } ``` #### 使用方法 ```javascript // 基础格式验证 sinma.isIdCard('110101199003070134'); // true sinma.isIdCard('440301199001011234'); // true sinma.isIdCard('12345'); // false // 严格验证(包含校验位、省份代码、日期验证) sinma.isIdCard('110101199003070134', true); // true sinma.isIdCard('110101199003070133', true); // false(校验位错误) ``` #### 使用范例 ```javascript // 用户注册身份证验证 function validateUserIdCard(idCard) { if (!idCard) { return { valid: false, error: '身份证号不能为空' }; } if (!sinma.isIdCard(idCard)) { return { valid: false, error: '身份证号格式不正确' }; } if (!sinma.isIdCard(idCard, true)) { return { valid: false, error: '身份证号校验失败,请检查输入' }; } // 提取身份证信息 const province = sinma.getProvinceByIdCard(idCard); const birthday = sinma.getBirthDateByIdCard(idCard); const gender = sinma.getGenderByIdCard(idCard); return { valid: true, info: { province, birthday, gender } }; } const result = validateUserIdCard('110101199003070134'); console.log(result); // { // valid: true, // info: { // province: '北京', // birthday: '1990-03-07', // gender: '男' // } // } ``` --- ### isEmpty(value) - 空值检测 检测值是否为空(null、undefined、空字符串、空数组、空对象)。 #### 参数 - `value` {*} - 待检测的值 #### 返回值 - {boolean} - 为空返回 `true`,否则返回 `false` #### 功能代码 ```javascript function isEmpty(value) { if (value == null) return true; if (typeof value === 'string') return value.trim() === ''; if (Array.isArray(value)) return value.length === 0; if (typeof value === 'object') return Object.keys(value).length === 0; return false; } ``` #### 使用方法 ```javascript sinma.isEmpty(null); // true sinma.isEmpty(undefined); // true sinma.isEmpty(''); // true sinma.isEmpty(' '); // true sinma.isEmpty([]); // true sinma.isEmpty({}); // true sinma.isEmpty('hello'); // false sinma.isEmpty([1, 2]); // false sinma.isEmpty({a: 1}); // false ``` #### 使用范例 ```javascript // 表单数据验证 function validateFormData(formData) { const errors = []; if (sinma.isEmpty(formData.name)) { errors.push('姓名不能为空'); } if (sinma.isEmpty(formData.email)) { errors.push('邮箱不能为空'); } if (sinma.isEmpty(formData.tags)) { errors.push('至少选择一个标签'); } return { valid: errors.length === 0, errors }; } // 过滤空值 const data = ['hello', '', null, 'world', undefined, 'test']; const filtered = data.filter(item => !sinma.isEmpty(item)); console.log(filtered); // ['hello', 'world', 'test'] ``` --- ### isNumber(value) - 数字验证 判断值是否为有效数字类型。 #### 参数 - `value` {*} - 待验证的值 #### 返回值 - {boolean} - 是有效数字返回 `true`,否则返回 `false` #### 功能代码 ```javascript function isNumber(value) { return typeof value === 'number' && !isNaN(value); } ``` #### 使用方法 ```javascript sinma.isNumber(123); // true sinma.isNumber(0); // true sinma.isNumber(-123); // true sinma.isNumber(3.14); // true sinma.isNumber('123'); // false sinma.isNumber(NaN); // false sinma.isNumber(Infinity); // true ``` #### 使用范例 ```javascript // 数值输入验证 function validateNumberInput(input) { if (!sinma.isNumber(input)) { return { valid: false, message: '请输入有效的数字' }; } if (input < 0) { return { valid: false, message: '数字不能为负数' }; } return { valid: true, value: input }; } // 数组中数字过滤 const mixedArray = [1, '2', 3.14, 'hello', null, 42]; const numbers = mixedArray.filter(sinma.isNumber); console.log(numbers); // [1, 3.14, 42] ``` --- ### isChinese(value) - 中文字符验证 判断字符串是否全部为中文字符。 #### 参数 - `value` {string} - 待验证的字符串 #### 返回值 - {boolean} - 全部为中文字符返回 `true`,否则返回 `false` #### 功能代码 ```javascript const chineseRegex = /^[\u4e00-\u9fa5]+$/; function isChinese(value) { if (typeof value !== 'string') return false; return chineseRegex.test(value); } ``` #### 使用方法 ```javascript sinma.isChinese('你好'); // true sinma.isChinese('中文测试'); // true sinma.isChinese('hello'); // false sinma.isChinese('你好world'); // false sinma.isChinese(''); // false ``` #### 使用范例 ```javascript // 中文姓名验证 function validateChineseName(name) { if (!name) { return { valid: false, error: '姓名不能为空' }; } if (!sinma.isChinese(name)) { return { valid: false, error: '请输入中文姓名' }; } if (name.length < 2 || name.length > 4) { return { valid: false, error: '姓名长度应为2-4个字符' }; } return { valid: true }; } // 文本内容过滤 function extractChineseText(text) { return text.split('').filter(char => sinma.isChinese(char)).join(''); } console.log(extractChineseText('Hello你好World世界123')); // 输出: '你好世界' ``` --- ### isUrl(value) - URL验证 验证URL地址格式是否正确。 #### 参数 - `value` {string} - 待验证的URL地址 #### 返回值 - {boolean} - 验证通过返回 `true`,否则返回 `false` #### 功能代码 ```javascript const urlRegex = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/; function isUrl(value) { if (typeof value !== 'string') return false; return urlRegex.test(value); } ``` #### 使用方法 ```javascript sinma.isUrl('https://www.example.com'); // true sinma.isUrl('http://test.co.uk'); // true sinma.isUrl('www.google.com'); // true sinma.isUrl('invalid-url'); // false sinma.isUrl('ftp://example.com'); // false ``` #### 使用范例 ```javascript // 链接验证和格式化 function processUrl(url) { if (!url) { return { valid: false, error: 'URL不能为空' }; } if (!sinma.isUrl(url)) { return { valid: false, error: '请输入正确的URL格式' }; } // 自动添加协议 const formattedUrl = url.startsWith('http') ? url : `https://${url}`; return { valid: true, originalUrl: url, formattedUrl: formattedUrl }; } const result = processUrl('www.example.com'); console.log(result); // { // valid: true, // originalUrl: 'www.example.com', // formattedUrl: 'https://www.example.com' // } ``` ## 综合示例 ```javascript // 用户注册表单验证 function validateRegistrationForm(formData) { const errors = []; // 验证手机号 if (!sinma.isPhone(formData.phone, true)) { errors.push('请输入正确的手机号码'); } // 验证邮箱 if (!sinma.isEmail(formData.email)) { errors.push('请输入正确的邮箱地址'); } // 验证身份证 if (!sinma.isIdCard(formData.idCard, true)) { errors.push('请输入正确的身份证号码'); } // 验证中文姓名 if (!sinma.isChinese(formData.name)) { errors.push('请输入中文姓名'); } // 验证个人网站(可选) if (formData.website && !sinma.isUrl(formData.website)) { errors.push('请输入正确的网站地址'); } return { valid: errors.length === 0, errors: errors }; } // 使用示例 const userData = { name: '张三', phone: '13812345678', email: 'zhangsan@example.com', idCard: '110101199003070134', website: 'www.zhangsan.com' }; const validation = validateRegistrationForm(userData); console.log(validation); ``` ## 注意事项 1. **类型安全**: 所有验证函数都会先检查输入类型,非预期类型会返回 `false` 2. **性能优化**: 使用预编译的正则表达式,避免重复编译 3. **中文优化**: 专门针对中国大陆的数据格式进行优化 4. **严格模式**: 部分函数支持严格验证模式,提供更准确的验证结果 5. **向后兼容**: 保留旧版本API别名,如 `isPhonenum`、`isSfz` 等 ## 相关模块 - [中文处理模块](./chinese.md) - 提供身份证信息提取等中文相关功能 - [字符串模块](./string.md) - 提供字符串处理和格式化功能