util-helpers 4.12.9 → 4.12.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/util-helpers.js +81 -88
- package/dist/util-helpers.js.map +1 -1
- package/dist/util-helpers.min.js +1 -1
- package/dist/util-helpers.min.js.map +1 -1
- package/esm/calculateCursorPosition.js +6 -7
- package/esm/formatBankCard.js +5 -5
- package/esm/formatMobile.js +4 -3
- package/esm/formatMoney.js +9 -10
- package/esm/isBankCard.js +5 -6
- package/esm/isChinese.js +5 -6
- package/esm/isIdCard.js +5 -6
- package/esm/isPassword.js +7 -8
- package/esm/isTWCard.js +3 -4
- package/esm/numberToChinese.js +14 -15
- package/esm/replaceChar.js +10 -9
- package/esm/utils/config.js +1 -1
- package/esm/validatePassword.js +7 -8
- package/lib/calculateCursorPosition.js +6 -7
- package/lib/formatBankCard.js +5 -5
- package/lib/formatMobile.js +4 -3
- package/lib/formatMoney.js +9 -10
- package/lib/isBankCard.js +5 -6
- package/lib/isChinese.js +5 -6
- package/lib/isIdCard.js +5 -6
- package/lib/isPassword.js +7 -8
- package/lib/isTWCard.js +3 -4
- package/lib/numberToChinese.js +14 -15
- package/lib/replaceChar.js +10 -9
- package/lib/utils/config.js +1 -1
- package/lib/validatePassword.js +7 -8
- package/package.json +1 -1
- package/types/calculateCursorPosition.d.ts +1 -1
- package/types/formatBankCard.d.ts +1 -1
- package/types/formatMobile.d.ts +1 -1
- package/types/formatMoney.d.ts +1 -1
- package/types/isBankCard.d.ts +1 -1
- package/types/isChinese.d.ts +1 -1
- package/types/isIdCard.d.ts +1 -1
- package/types/isPassword.d.ts +1 -1
- package/types/isTWCard.d.ts +1 -1
- package/types/numberToChinese.d.ts +1 -1
- package/types/replaceChar.d.ts +1 -1
- package/types/validatePassword.d.ts +1 -1
package/dist/util-helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util-helpers.js","sources":["../src/utils/type/isUndefined.js","../src/utils/type/isNull.js","../src/utils/type/isNil.js","../src/utils/type/isType.js","../src/utils/type/isString.js","../src/utils/convertToString.js","../src/normalizeString.js","../src/isMobile.js","../src/isTelephone.js","../src/isPostcode.js","../src/isIdCard.js","../src/isEmail.js","../src/isQQ.js","../src/isWX.js","../src/isVehicle.js","../src/isBankCard.js","../src/isSocialCreditCode.js","../src/utils/config.js","../src/utils/devWarn.js","../src/validatePassword.js","../src/isPassword.js","../src/isPassport.js","../src/isChinese.js","../src/isIPv4.js","../src/isIPv6.js","../src/isUrl.js","../src/isBusinessLicense.js","../src/isPromiseLike.js","../src/isHMCard.js","../src/isTWCard.js","../src/isSwiftCode.js","../src/utils/constants.js","../src/utils/type/isNaN.js","../src/utils/type/isNumber.js","../src/utils/type/isSymbol.js","../src/utils/math.util.js","../src/formatMoney.js","../src/formatBankCard.js","../src/replaceChar.js","../src/numberToChinese.js","../src/bytesToSize.js","../src/parseIdCard.js","../src/blobToDataURL.js","../src/dataURLToBlob.js","../src/setDataURLPrefix.js","../src/safeDate.js","../src/formatMobile.js","../src/padZero.js","../src/times.js","../src/plus.js","../src/minus.js","../src/divide.js","../src/round.js","../src/waitTime.js","../src/calculateCursorPosition.js","../src/randomString.js","../src/strlen.js"],"sourcesContent":["/**\n * 检查值是否为Undefined\n *\n * @static\n * @alias module:Type.isUndefined\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为Undefined\n * @example\n *\n * isUndefined(undefined)\n * // => true\n *\n * isUndefined(void 0)\n * // => true\n *\n * isUndefined(null)\n * // => false\n */\nfunction isUndefined(value) {\n return value === void 0;\n}\n\nexport default isUndefined;\n","/**\n * 检查值是否为Null\n *\n * @static\n * @alias module:Type.isNull\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为Null\n * @example\n *\n * isNull(null)\n * // => true\n *\n * isNull(void 0)\n * // => false\n */\nfunction isNull(value) {\n return value === null;\n}\n\nexport default isNull;\n","import isUndefined from './isUndefined';\nimport isNull from './isNull';\n\n/**\n * 检查值是否为 undefined 或 null\n *\n * @static\n * @alias module:Type.isNaN\n * @since 4.3.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为 undefined 或 null\n */\nfunction isNil(value) {\n return isUndefined(value) || isNull(value);\n}\n\nexport default isNil;\n","const toString = Object.prototype.toString;\n\n/**\n * 检测值的 `toString` 类型\n *\n * @private\n * @since 1.1.0\n * @param {*} value 检查值\n * @param {string} typename 类型名称\n * @returns {boolean} 返回值的 `toString` 类型是否匹配\n */\nfunction isType(value, typename) {\n return toString.call(value) === `[object ${typename}]`;\n}\n\nexport default isType;\n","import isType from './isType';\n\n/**\n * 检查值是否为String\n *\n * @static\n * @alias module:Type.isString\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为String\n * @example\n *\n * isString('abc')\n * // => true\n *\n * isString(1)\n * // => false\n */\nfunction isString(value) {\n return isType(value, 'String');\n}\n\nexport default isString;\n","import isString from './type/isString';\n\n/**\n * 转换为字符串\n *\n * @param {*} value 值\n * @returns {string} 字符串\n */\nfunction convertToString(value) {\n return isString(value) ? value : String(value);\n}\n\nexport default convertToString;\n","import isNil from './utils/type/isNil';\nimport convertToString from './utils/convertToString';\n\n/**\n * 规整化字符串。如果值为 undefined 或 null 将转为空字符串,如果值不是字符串类型将转为字符串。\n *\n * @static\n * @alias module:Processor.normalizeString\n * @see 参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String#string_instances|String}\n * @since 4.3.0\n * @param {*} value 待处理的值\n * @returns {string} 规整化的值\n * @example\n * \n * normalizeString(); // ''\n * normalizeString(undefined); // ''\n * normalizeString(void 0); // ''\n * normalizeString(null); // ''\n *\n * normalizeString(true); // 'true'\n * normalizeString(NaN); // 'NaN'\n * normalizeString(1); // '1'\n * normalizeString('a'); // 'a'\n * \n */\nfunction normalizeString(value) {\n if (isNil(value)) {\n return '';\n }\n return convertToString(value);\n}\n\nexport default normalizeString;\n","import normalizeString from './normalizeString';\n\n// 手机号码 11位数字,以1开头,第二位是3456789其中一个,后面再加9个数字\nconst reg = /^1[3456789]\\d{9}$/;\n\n/**\n * 检测值是否为手机号码\n *\n * @static\n * @alias module:Validator.isMobile\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为手机号码\n * @example\n *\n * isMobile('13000000000'); // true\n * isMobile('13000'); // false\n *\n */\nfunction isMobile(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isMobile;\n","import normalizeString from './normalizeString';\n\n// 固定电话 支持区号和分机号 3~4位区号,以0开头;7~8位直播号,以2~9开头;1~6位分机号\nconst reg = /^(0\\d{2,3}\\-)?([2-9]\\d{6,7})(\\-\\d{1,6})?$/;\n\n/**\n * 检测值是否为固定电话\n *\n * @static\n * @alias module:Validator.isTelephone\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为固定电话\n * @example\n *\n * isTelephone('22033212'); // true\n * isTelephone('13000000000'); // false\n * \n * // 含区号\n * isTelephone('021-22033212'); // true\n *\n * // 含区号和分机号\n * isTelephone('021-22033212-123'); // true\n *\n */\nfunction isTelephone(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isTelephone;\n","import normalizeString from './normalizeString';\n\n// 邮政编码\nconst reg = /^\\d{6}$/;\n\n/**\n * 检测值是否为邮政编码,6位数字\n *\n * @static\n * @alias module:Validator.isPostcode\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为邮政编码\n * @example\n *\n * isPostcode('101111'); // true\n * isPostcode('123'); // false\n *\n */\nfunction isPostcode(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isPostcode;\n","import normalizeString from './normalizeString';\n\n// 身份证号正则\nconst regIdCard = /^[1-9]\\d{5}(19|20)?\\d{2}((0[1-9])|(1[012]))(([0-2][1-9])|10|20|30|31)\\d{3}(\\d|X)?$/i;\n\n/**\n * 校验码计算\n *\n * @private\n * @see 参考 {@link https://zh.wikipedia.org/wiki/中华人民共和国公民身份号码|中华人民共和国公民身份号码}\n * @see 参考 {@link https://baike.baidu.com/item/居民身份证号码|居民身份证号码}\n * @param {string} id 身份证号码\n * @returns {boolean} 校验码是否正确\n */\nfunction check(id) {\n let index, sum, num;\n for (sum = index = 0; index < 17; index++) {\n sum += (Math.pow(2, 17 - index) % 11) * Number(id[index]);\n }\n num = (12 - (sum % 11)) % 11;\n if (num < 10) {\n return num === Number(id[17]);\n } else {\n return id[17].toUpperCase() === 'X';\n }\n}\n\n/**\n * 检测值是否为18位身份证号码。<br/>宽松模式下,支持15位身份证号码\n *\n * @static\n * @alias module:Validator.isIdCard\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.loose=false] 宽松模式,支持15位身份证号码\n * @param {boolean} [options.checkCode=true] 是否校验最后一位校验码,仅支持18位身份证号码\n * @returns {boolean} 值是否为身份证号\n * @example\n *\n * isIdCard('130701199310302288'); // true\n * isIdCard('13070119931030228X'); // false\n *\n * // 不校验校验码\n * isIdCard('13070119931030228X', { checkCode: false }); // true\n *\n * // 默认不支持15位身份证号码\n * isIdCard('320311770706001'); // false\n * \n * // 宽松模式,支持15位身份证号\n * isIdCard('320311770706001', { loose: true }); // true\n *\n */\nfunction isIdCard(value, { loose = false, checkCode = true } = {}) {\n const valueStr = normalizeString(value);\n if (valueStr.length === 15 && loose) {\n return regIdCard.test(valueStr);\n }\n\n if (valueStr.length === 18 && regIdCard.test(valueStr)) {\n if (checkCode) {\n return check(valueStr);\n }\n return true;\n }\n\n return false;\n}\n\nexport default isIdCard;\n","import normalizeString from './normalizeString';\n\n// 邮箱\nconst reg = /^[\\da-z]+([\\-\\.\\_]?[\\da-z]+)*@[\\da-z]+([\\-\\.]?[\\da-z]+)*(\\.[a-z]{2,})+$/i;\n\n/**\n * 检测值是否为Email\n *\n * @static\n * @alias module:Validator.isEmail\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为Email\n * @example\n *\n * isEmail('1232@qq.com'); // true\n * isEmail('123@'); // false\n *\n */\nfunction isEmail(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isEmail;\n","import normalizeString from './normalizeString';\n\n// QQ号正则\nconst reg = /^[1-9]\\d{4,10}$/;\n\n/**\n * 检测值是否为QQ号,非0开头,5至11位数字\n *\n * @static\n * @alias module:Validator.isQQ\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为QQ号\n * @example\n *\n * isQQ('12345'); // true\n * isQQ('123'); // false\n *\n */\nfunction isQQ(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isQQ;\n","import normalizeString from './normalizeString';\n\n// 微信号 6至20位,以字母开头,字母,数字,减号(连接符),下划线\nconst reg = /^[a-z]([-_a-z0-9]{5,19})+$/i;\n\n/**\n * 检测值是否为微信号\n *\n * @static\n * @alias module:Validator.isWX\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为微信号\n * @example\n *\n * isWX('a12345'); // true\n * isWX('123'); // false\n *\n */\nfunction isWX(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isWX;\n","import normalizeString from './normalizeString';\n\n// 车牌号正则\nconst reg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([A-Z0-9]{4}[A-Z0-9挂学警港澳]{1})|([A-Z0-9]{5}[DF])|([DF][A-Z0-9]{5}))$/;\n\n/**\n * 检测值是否为车牌号,支持新能源和非新能源车牌\n *\n * @static\n * @alias module:Validator.isVehicle\n * @see 参考 {@link https://baike.baidu.com/item/车牌号|车牌号}\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为车牌号\n * @example\n *\n * isVehicle('京L12345'); // true\n * isVehicle('京L1234学'); // true\n * isVehicle('BL1234警'); // true\n * \n * // 新能源车牌\n * isVehicle('粤BD12345'); // true\n * isVehicle('粤BF12345'); // true\n * isVehicle('粤B12345D'); // true\n * isVehicle('粤B12345F'); // true\n *\n */\nfunction isVehicle(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isVehicle;\n","import normalizeString from './normalizeString';\n\n// 非0开头,10~21位数字\nconst reg = /^[1-9]\\d{9,20}$/;\n\n// 8~30位数字\nconst regLoose = /^\\d{8,30}$/;\n\n/**\n * luhn 计算校验位\n * @private\n * @param {string} numStr 银行卡前面数字\n * @returns {number}\n */\nfunction sumCheckCode(numStr) {\n const numArr = (numStr + '').replace(/\\D/g, '').split('').reverse();\n\n let sum = 0;\n for (let i = 0; i < numArr.length; i++) {\n const currNum = parseInt(numArr[i]);\n sum += i % 2 === 0 ? currNum * 2 - (currNum > 4 ? 9 : 0) : currNum;\n }\n const mod = sum % 10;\n return mod !== 0 ? 10 - mod : 0;\n}\n\n/**\n * 检测值是否为银行卡号。正常模式(非0开头,10~21位数字)宽松模式(8~30位数字)\n *\n * @static\n * @alias module:Validator.isBankCard\n * @see 参考 {@link https://kf.qq.com/faq/170112ABnm6b170112FvquAn.html|常用银行账号位数参考}\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.loose=false] 宽松模式,8~30位数字\n * @param {boolean} [options.luhn=false] 使用 Luhn 算法校验校验码\n * @returns {boolean} 值是否为银行卡号\n * @example\n *\n * isBankCard('6228480402564890018'); // true\n * isBankCard('6228480402564890'); // true\n * isBankCard('123456789'); // false\n * \n * // 宽松模式\n * isBankCard('123456789', { loose: true }); // true\n *\n */\nfunction isBankCard(value, { loose = false, luhn = false } = {}) {\n const valueStr = normalizeString(value);\n const validateResult = loose ? regLoose.test(valueStr) : reg.test(valueStr);\n\n if (validateResult && luhn) {\n const precode = valueStr.substring(0, valueStr.length - 1);\n const checkCode = valueStr[valueStr.length - 1];\n return checkCode === String(sumCheckCode(precode));\n }\n return validateResult;\n}\n\nexport default isBankCard;\n","import normalizeString from './normalizeString';\n\n// 基础规则,由18位数字和大写字母组成,不使用I、O、Z、S、V。\nconst baseReg = /^[\\dA-HJ-NPQRTUWXY]{2}\\d{6}[\\dA-HJ-NPQRTUWXY]{10}$/;\n\n// 基础字符组成\nconst baseCodeArr = '0123456789ABCDEFGHJKLMNPQRTUWXY'.split('');\n\n/**\n * 计算校验码\n *\n * @private\n * @since 1.1.0\n * @param {string} preCode 统一代码前17位\n * @returns {string} 校验码\n */\nfunction sumCheckCode(preCode) {\n let total = 0;\n\n // 计算字符位置对应序号和加权因子的乘积,总和\n for (let i = 0; i < 17; i++) {\n // 字符位置对应的基础编码序号\n const index = baseCodeArr.findIndex((item) => item === preCode[i]);\n // 加权因子\n const wf = Math.pow(3, i) % 31;\n // 计算序号和加权因子的乘积,并计算级数之和\n total += index * wf;\n }\n\n // 计算整数求余函数MOD\n const remainder = total % 31;\n // 校验码字符值序号\n const checkCodeIndex = remainder !== 0 ? 31 - remainder : 0;\n\n return baseCodeArr[checkCodeIndex];\n}\n\n/**\n * 检测值是否为统一社会信用代码,也叫三证合一组织代码。由18位数字和大写字母组成,不使用I、O、Z、S、V。\n *\n * @static\n * @alias module:Validator.isSocialCreditCode\n * @see 参考 {@link https://zh.wikisource.org/zh-hans/GB_32100-2015_法人和其他组织统一社会信用代码编码规则|GB 32100-2015 法人和其他组织统一社会信用代码编码规则}\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.checkCode=true] 是否校验最后一位校验码,如果为false,不校验校验位。\n * @returns {boolean} 值是否为统一社会信用代码\n * @example\n *\n * isSocialCreditCode('91350100M000100Y43'); // true\n * isSocialCreditCode('91350100M000100Y4A'); // false\n *\n * // 不校验校验位,长度和类型还是有校验的\n * isSocialCreditCode('91350100M000100Y4A', { checkCode: false }); // true\n * isSocialCreditCode('91350100M000100YIO', { checkCode: false }); // false\n * isSocialCreditCode('91350100M000100Y', { checkCode: false }); // false\n *\n */\nfunction isSocialCreditCode(value, options = {}) {\n const valueStr = normalizeString(value);\n // @ts-ignore\n // TODO 下个版本废弃 loose\n const { loose = false, checkCode: cc = true } = options;\n const needCheckCode = !loose && cc;\n\n const passBaseRule = baseReg.test(valueStr);\n\n // 宽松模式 或 基础规则不通过直接返回\n if (!needCheckCode || !passBaseRule) {\n return passBaseRule;\n }\n\n // 前17位\n const preCode = valueStr.substring(0, 17);\n // 校验码\n const lastCode = valueStr.substring(valueStr.length - 1);\n // 计算校验码\n const checkCode = sumCheckCode(preCode);\n\n return lastCode === checkCode;\n}\n\nexport default isSocialCreditCode;\n","// @ts-ignore\nimport { version } from '../../package.json';\n\nconst config = {\n // 禁用warning提示\n disableWarning: true\n};\n\n/**\n * 设置禁止warning提示\n * @static\n * @alias module:Debug.formatBankCard\n * @since 3.6.1\n * @param {boolean} bool 是否禁止warning提示\n */\nfunction setDisableWarning(bool) {\n config.disableWarning = !!bool;\n}\n\nexport { config, setDisableWarning, version };\n","import { config } from './config';\n\n/**\n * 打印警告信息\n *\n * @param {any[]} args 打印的信息\n */\nfunction devWarn(...args) {\n if (!config.disableWarning) {\n console.warn(...args);\n }\n}\n\nexport default devWarn;\n","import devWarn from './utils/devWarn';\n\nconst regNumber = /[\\d]/;\nconst regLowerCaseLetter = /[a-z]/;\nconst regUpperCaseLetter = /[A-Z]/;\nconst regAllNumberAndLetter = /[\\d|a-z]/gi;\n\n/**\n * 是否包含数字\n *\n * @private\n * @param {string} val 检查的值\n * @returns {boolean} 是否包含数字\n */\nfunction hasNumber(val) {\n return regNumber.test(val);\n}\n\n/**\n * 是否包含小写字母\n *\n * @private\n * @param {string} val 检测的值\n * @returns {boolean} 是否包含小写字母\n */\nfunction hasLowerCaseLetter(val) {\n return regLowerCaseLetter.test(val);\n}\n\n/**\n * 是否包含大写字母\n *\n * @private\n * @param {string} val 检测的值\n * @returns {boolean} 是否包含大写字母\n */\nfunction hasUpperCaseLetter(val) {\n return regUpperCaseLetter.test(val);\n}\n\n/**\n * 是否为十六进制\n *\n * @private\n * @param {string} val 检测的值\n * @returns {boolean} 是否为十六进制\n */\nfunction hasHex(val) {\n return val.indexOf('\\\\x') > -1 || val.indexOf('\\\\u') > -1;\n}\n\n/**\n * 是否包含特殊字符\n *\n * @private\n * @param {string} val 检测的值\n * @param {string} chars 特殊字符\n * @returns {boolean} 是否包含特殊字符\n */\nfunction hasSpecialCharacter(val, chars) {\n if (!chars || !val) {\n return false;\n }\n\n const specialChars = val.replace(regAllNumberAndLetter, '');\n\n if (!specialChars) {\n return false;\n }\n\n const regChars = hasHex(chars) ? new RegExp(`[${chars}]`) : null;\n\n if (regChars) {\n return regChars.test(specialChars);\n }\n\n let ret = false;\n specialChars.split('').some((charItem) => {\n if (chars.indexOf(charItem) > -1) {\n ret = true;\n }\n return ret;\n });\n return ret;\n}\n\n/**\n * 是否包含非法字符\n *\n * @private\n * @param {string} val 检测的值\n * @param {string} chars 特殊字符\n * @returns {boolean} 是否包含非法字符\n */\nfunction hasUnallowableCharacter(val, chars) {\n if (!val) {\n return false;\n }\n\n const specialChars = val.replace(regAllNumberAndLetter, '');\n\n if (!specialChars) {\n return false;\n } else if (!chars) {\n return true;\n }\n\n const regChars = hasHex(chars) ? new RegExp(`[^${chars}]`) : null;\n if (regChars) {\n return regChars.test(specialChars);\n }\n let ret = false;\n specialChars.split('').some((charItem) => {\n if (chars.indexOf(charItem) === -1) {\n ret = true;\n }\n return ret;\n });\n return ret;\n}\n\n/**\n * @typedef {Object} PasswordContaines - 验证密码的包含内容\n * @property {boolean} number - 包含数字\n * @property {boolean} lowerCaseLetter - 包含小写字母\n * @property {boolean} upperCaseLetter - 包含大写字母\n * @property {boolean} specialCharacter - 包含特殊字符\n * @property {boolean} unallowableCharacter - 包含非法字符\n */\n\n/**\n * @typedef {Object} ValidatePasswordReturn - 验证结果\n * @property {boolean} validated - 验证结果,根据密码强度、是否包含非法字符得出\n * @property {number} level - 强度级别,包含数字/大小写字母/特殊字符\n * @property {PasswordContaines} containes - 包含内容\n */\n\n/**\n * 验证密码(数字、大小写字母、特殊字符、非法字符)\n *\n * @see 参考 {@link https://baike.baidu.com/item/ASCII#3|ASCII}\n * @static\n * @alias module:Validator.validatePassword\n * @since 3.7.0\n * @param {string} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {number} [options.level=2] 密码强度 1-包含一种字符 2-包含两种字符 3-包含三种字符。(大写字母、小写字母、数字、特殊字符)\n * @param {boolean} [options.ignoreCase=false] 是否忽略大小写,为 ture 时,大小写字母视为一种字符\n * @param {string} [options.special=\"!@#$%^&*()-=_+[]\\|{},./?<>~\"] 支持的特殊字符\n * @returns {ValidatePasswordReturn} 验证结果\n * @example\n *\n * validatePassword('a12345678');\n * // =>\n * {\n * validated: true, // 验证结果,根据密码强度、是否包含非法字符得出\n * level: 2, // 强度级别\n * containes: {\n * number: true, // 包含数字\n * lowerCaseLetter: true, // 包含小写字母\n * upperCaseLetter: false, // 包含大写字母\n * specialCharacter: false, // 包含特殊字符\n * unallowableCharacter: false // 包含非法字符\n * }\n * }\n *\n * validatePassword('a12345678', { level: 3 });\n * // =>\n * {\n * validated: false,\n * level: 2,\n * containes: {\n * number: true,\n * lowerCaseLetter: true,\n * upperCaseLetter: false,\n * specialCharacter: false,\n * unallowableCharacter: false\n * }\n * }\n *\n * validatePassword('_Aa一二三45678', { level: 3, ignoreCase: true });\n * // =>\n * {\n * validated: false,\n * level: 3,\n * containes: {\n * number: true,\n * lowerCaseLetter: true,\n * upperCaseLetter: true,\n * specialCharacter: true,\n * unallowableCharacter: true\n * }\n * }\n *\n * // 自定义特殊字符\n * validatePassword('_Aa一二三45678', { level: 3, ignoreCase: true, special: '_一二三' });\n * // =>\n * {\n * validated: true,\n * level: 3,\n * containes: {\n * number: true,\n * lowerCaseLetter: true,\n * upperCaseLetter: true,\n * specialCharacter: true,\n * unallowableCharacter: false\n * }\n * }\n */\nfunction validatePassword(value, { level = 2, ignoreCase = false, special = '\\\\x21-\\\\x2F\\\\x3A-\\\\x40\\\\x5B-\\\\x60\\\\x7B-\\\\x7E' } = {}) {\n let valStr = value;\n\n if (typeof value !== 'string') {\n devWarn(`[validatePassword] value must be a string.`);\n valStr = '';\n }\n\n let currentLevel = 0;\n\n // 包含数字\n const containesNumber = hasNumber(valStr);\n // 包含小写字母\n const containesLowerCaseLetter = hasLowerCaseLetter(valStr);\n // 包含大写字母\n const containesUpperCaseLetter = hasUpperCaseLetter(valStr);\n // 包含特殊字符\n const containesSpecialCharacter = hasSpecialCharacter(valStr, special);\n // 包含非法字符,即含有非数字字母特殊字符以外的其他字符\n const containesUnallowableCharacter = hasUnallowableCharacter(valStr, special);\n\n if (containesNumber) {\n currentLevel += 1;\n }\n\n // 不区分大小写\n if (ignoreCase) {\n if (containesLowerCaseLetter || containesUpperCaseLetter) {\n currentLevel += 1;\n }\n } else {\n // 区分大小写\n if (containesLowerCaseLetter) {\n currentLevel += 1;\n }\n if (containesUpperCaseLetter) {\n currentLevel += 1;\n }\n }\n\n if (containesSpecialCharacter) {\n currentLevel += 1;\n }\n\n // 验证结果\n const validated = currentLevel >= level && !containesUnallowableCharacter;\n\n return {\n validated,\n level: currentLevel,\n containes: {\n number: containesNumber,\n lowerCaseLetter: containesLowerCaseLetter,\n upperCaseLetter: containesUpperCaseLetter,\n specialCharacter: containesSpecialCharacter,\n unallowableCharacter: containesUnallowableCharacter\n }\n };\n}\n\nexport default validatePassword;\n","import validatePassword from './validatePassword';\n\n/**\n * 检测值是否符合密码强度\n * <p><strong>注意:该校验只校验是否存在不同字符(大小写字母、数字、特殊符号),不判断长度。</strong></p>\n * <p><i>如果需要更细致的验证,请使用 <a href=\"#.validatePassword\">validatePassword</a></i></p>\n *\n * @see 参考 {@link https://baike.baidu.com/item/ASCII#3|ASCII}\n * @static\n * @alias module:Validator.isPassword\n * @since 1.1.0\n * @requires module:Validator.validatePassword\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {number} [options.level=2] 密码强度 1-包含一种字符 2-包含两种字符 3-包含三种字符。(大写字母、小写字母、数字、特殊字符)\n * @param {boolean} [options.ignoreCase=false] 是否忽略大小写,为 ture 时,大小写字母视为一种字符\n * @param {string} [options.special=\"!@#$%^&*()-=_+[]\\|{},./?<>~\"] 支持的特殊字符\n * @returns {boolean} 值是否符合密码强度\n * @example\n *\n * isPassword('a12345678'); // true\n * \n * // 3级密码强度\n * isPassword('a12345678', {level: 3}); // false\n * isPassword('Aa12345678', {level: 3}); // true\n * \n * // 3级密码强度,大小写字符仅计算1级强度\n * isPassword('Aa12345678', {level: 3, ignoreCase: true}); // false\n * isPassword('_Aa12345678', {level: 3, ignoreCase: true}); // true\n *\n * // 仅支持 数字、字母、特殊字符,其他非法字符如中文字符是校验不通过的\n * isPassword('_Aa一二三45678', {level: 3, ignoreCase: true}); // false\n * isPassword(' _Aa12345678', {level: 3, ignoreCase: true}); // false\n * \n */\nfunction isPassword(value, { level = 2, ignoreCase = false, special = '\\\\x21-\\\\x2F\\\\x3A-\\\\x40\\\\x5B-\\\\x60\\\\x7B-\\\\x7E' } = {}) {\n return validatePassword(value, { level, ignoreCase, special }).validated;\n}\n\nexport default isPassword;\n","import normalizeString from './normalizeString';\n\n// 护照号 9位,包括首字母和数字;支持 普通护照(E*)、外交护照(DE)、公务护照(SE)、公务普通护照(PE)、香港特区护照(K/KJ/H*)、澳门特区护照(MA/MB/M*)\nconst reg = /^((e[\\da-z])|(de)|(se)|(pe)|([khm][\\da-z]))[\\da-z]{7}$/i;\n\n/**\n * 检测值是否为护照号\n * 支持普通护照(E*)、外交护照(DE)、公务护照(SE)、公务普通护照(PE)、香港特区护照(K/KJ/H*)、澳门特区护照(MA/MB/M*),注意不区分大小写\n *\n * @static\n * @alias module:Validator.isPassport\n * @see 参考 {@link https://zh.wikipedia.org/wiki/中华人民共和国护照#个人资料页|中华人民共和国护照#个人资料页}\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为护照号\n * @example\n *\n * isPassport('E12345678'); // true\n * isPassport('abc'); // false\n *\n */\nfunction isPassport(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isPassport;\n","import normalizeString from './normalizeString';\n\nconst chineseDictionary = {\n // 基本汉字\n chineseBasic: '[\\u4e00-\\u9fa5]',\n\n // 基本汉字补充\n chineseExtend: '[\\u9ea6-\\u9fef]',\n\n // 汉字扩展A\n chineseExtendA: '[\\u3400-\\u4DB5]',\n\n // 汉字扩展B\n chineseExtendB: '[\\u{20000}-\\u{2A6D6}]',\n\n // 汉字扩展C\n chineseExtendC: '[\\u{2A700}-\\u{2B734}]',\n\n // 汉字扩展D\n chineseExtendD: '[\\u{2B740}-\\u{2B81D}]',\n\n // 汉字扩展E\n chineseExtendE: '[\\u{2B820}-\\u{2CEA1}]',\n\n // 汉字扩展F\n chineseExtendF: '[\\u{2CEB0}-\\u{2EBE0}]'\n};\n\nconst looseChineseRegExp = chineseDictionary.chineseBasic + '+';\nconst chineseRegExp = '^' + chineseDictionary.chineseBasic + '+$';\n\nconst chineseWithExtend = '(?:' + chineseDictionary.chineseBasic + '|' + chineseDictionary.chineseExtend + '|' + chineseDictionary.chineseExtendA + '|' + chineseDictionary.chineseExtendB + '|' + chineseDictionary.chineseExtendC + '|' + chineseDictionary.chineseExtendD + '|' + chineseDictionary.chineseExtendE + '|' + chineseDictionary.chineseExtendF + ')';\nconst looseChineseExtendRegExp = chineseWithExtend + '+';\nconst chineseExtendRegExp = '^' + chineseWithExtend + '+$';\n\n// eslint-disable-next-line no-prototype-builtins\nconst supportRegExpUnicode = RegExp.prototype.hasOwnProperty('unicode');\n\n/**\n * 检测值是否为中文\n *\n * @static\n * @alias module:Validator.isChinese\n * @since 1.1.0\n * @see 参考 {@link http://www.unicode.org/reports/tr38/#BlockListing|4.4 Listing of Characters Covered by the Unihan Database}\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.loose=false] 宽松模式。如果为true,只要包含中文即为true\n * @param {boolean} [options.useExtend=false] 使用统一表意文字扩展A-F。注意:如果不支持 `RegExp.prototype.unicode`,扩展字符集将自动不生效,如IE浏览器。\n * @returns {boolean} 值是否为中文\n * @example\n *\n * isChinese('林某某'); // true\n * isChinese('林A'); // false\n *\n * // 宽松模式,只要包含中文即为true\n * isChinese('林A', { loose: true }); // true\n * isChinese('A林A', { loose: true }); // true\n *\n * // 扩展字符集的字符\n * isChinese('𠮷'); // false\n * \n * // 使用中文扩展字符集,需要浏览器支持 RegExp.prototype.unicode 才生效。\n * isChinese('𠮷', { useExtend: true }); // true\n * isChinese('𠮷aa', { useExtend: true, loose: true }); // true\n * \n */\nfunction isChinese(value, { loose = false, useExtend = false } = {}) {\n const valueStr = normalizeString(value);\n const basicRegExp = loose ? looseChineseRegExp : chineseRegExp;\n const extendRegExp = loose ? looseChineseExtendRegExp : chineseExtendRegExp;\n\n const hasExtend = useExtend && supportRegExpUnicode;\n const resultRegExp = hasExtend ? extendRegExp : basicRegExp;\n const flag = hasExtend ? 'u' : undefined;\n const reg = new RegExp(resultRegExp, flag);\n return reg.test(valueStr);\n}\n\nexport default isChinese;\n","import normalizeString from './normalizeString';\n\n// ipv4正则\nconst reg = /^((\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/;\n\n/**\n * 检测值是否为ipv4\n *\n * @static\n * @alias module:Validator.isIPv4\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为ipv4\n * @example\n *\n * isIPv4('192.168.1.1'); // true\n * isIPv4('255.255.255.255'); // true\n * isIPv4('256.256.256.256'); // false\n * isIPv4('0.0'); // false\n *\n */\nfunction isIPv4(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isIPv4;\n","import normalizeString from './normalizeString';\n\n// ipv6正则\nconst reg = /^((([0-9A-F]{1,4}:){7}([0-9A-F]{1,4}|:))|(([0-9A-F]{1,4}:){6}(:[0-9A-F]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3})|:))|(([0-9A-F]{1,4}:){5}(((:[0-9A-F]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3})|:))|(([0-9A-F]{1,4}:){4}(((:[0-9A-F]{1,4}){1,3})|((:[0-9A-F]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3}))|:))|(([0-9A-F]{1,4}:){3}(((:[0-9A-F]{1,4}){1,4})|((:[0-9A-F]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3}))|:))|(([0-9A-F]{1,4}:){2}(((:[0-9A-F]{1,4}){1,5})|((:[0-9A-F]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3}))|:))|(([0-9A-F]{1,4}:){1}(((:[0-9A-F]{1,4}){1,6})|((:[0-9A-F]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3}))|:))|(:(((:[0-9A-F]{1,4}){1,7})|((:[0-9A-F]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3}))|:)))(%.+)?$/i;\n\n/**\n * 检测值是否为ipv6\n *\n * @static\n * @alias module:Validator.isIPv6\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为ipv6\n * @example\n *\n * // 冒分十六进制表示法\n * isIPv6('2001:0DB8:0000:0023:0008:0800:200C:417A'); // true\n *\n * // 前导0省略\n * isIPv6('2001:DB8:0:23:8:800:200C:417A'); // true\n * isIPv6('FF01:0:0:0:0:0:0:1101'); // true\n *\n * // 0位压缩表示法\n * isIPv6('FF01::1101'); // true\n * isIPv6('::1'); // true\n * isIPv6('::'); // true\n * isIPv6('0:0:0:0:0:0:0:1'); // true\n * isIPv6('0:0:0:0:0:0:0:0'); // true\n *\n * // 内嵌IPv4地址表示法\n * isIPv6('::192.168.1.1'); // true\n * isIPv6('::FFFF:192.168.1.1'); // true\n * isIPv6('192.168.1.1'); // false\n *\n */\nfunction isIPv6(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isIPv6;\n","import normalizeString from './normalizeString';\n\n// url正则\nconst reg = /(((^https?:(?:\\/\\/)?)(?:[-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9.-]+(?::\\d+)?|(?:www.|[-;:&=\\+\\$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[\\+~%\\/.\\w-_]*)?\\??(?:[-\\*\\+=&;%@.\\w_]*)#?(?:[\\w]*))?)$/;\n\n/**\n * 检测值是否为url\n *\n * @static\n * @alias module:Validator.isUrl\n * @since 3.4.0\n * @see 参考 {@link https://zh.wikipedia.org/wiki/统一资源定位符|统一资源定位符}\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为url\n * @example\n *\n * isUrl(''); // false\n * isUrl('8.8.8.8'); // false\n * isUrl('example.com'); // true\n * isUrl('http://example.com'); // true\n * isUrl('https://example.com:8080'); // true\n * isUrl('http://www.example.com/test/123'); // true\n * isUrl('http://www.example.com/test/123?foo=bar'); // true\n * \n */\nfunction isUrl(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isUrl;\n","import normalizeString from './normalizeString';\n\n// 基础规则,由14位数字本体码和1位数字校验码组成,其中本体码从左至右依次为:6位首次登记机关码、8位顺序码。\nconst baseReg = /^\\d{15}$/;\n\n/**\n * 计算校验码\n *\n * @private\n * @since 3.5.0\n * @param {string} preCode 营业执照前14位\n * @returns {number} 校验码\n */\nfunction sumCheckCode(preCode) {\n let retNum; // 校验位数字\n\n let pj = 10; // Pj+1 11,初始为10\n\n for (let j = 0; j < 14; j++) {\n const sj = pj + Number(preCode[j]);\n let sj10 = sj % 10;\n sj10 = sj10 === 0 ? 10 : sj10;\n const pj1 = sj10 * 2;\n pj = pj1 % 11;\n }\n\n // 反模10计算\n if (pj === 1) {\n retNum = 0;\n } else {\n retNum = 11 - pj;\n }\n\n return retNum;\n}\n\n/**\n * 检测值是否为营业执照号,也叫工商注册号。由14位数字本体码和1位数字校验码组成,其中本体码从左至右依次为:6位首次登记机关码、8位顺序码。\n *\n * @static\n * @alias module:Validator.isBusinessLicense\n * @see 参考 {@link https://wenku.baidu.com/view/19873704cc1755270722087c.html|GS15—2006 工商行政管理市场主体注册号编制规则}\n * @since 3.5.0\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.checkCode=true] 是否校验最后一位校验码,如果为false,不校验校验位。\n * @returns {boolean} 值是否为营业执照号\n * @example\n *\n * isBusinessLicense('310115600985533'); // true\n * isBusinessLicense('310115600985535'); // false\n *\n * // 不校验验证码,长度和类型还是有校验\n * isBusinessLicense('310115600985535', { checkCode: false }); // true\n * isBusinessLicense('ac115600985535', { checkCode: false }); // false\n * isBusinessLicense('31011560098', { checkCode: false }); // false\n * \n */\nfunction isBusinessLicense(value, options = {}) {\n const valueStr = normalizeString(value);\n // @ts-ignore\n // TODO 下个版本废弃 loose\n const { loose = false, checkCode: cc = true } = options;\n const needCheckCode = !loose && cc;\n\n const passBaseRule = baseReg.test(valueStr);\n\n // 宽松模式 或 基础规则不通过直接返回\n if (!needCheckCode || !passBaseRule) {\n return passBaseRule;\n }\n\n // 前14位\n const preCode = valueStr.substring(0, 14);\n // 校验码\n const lastCode = valueStr.substring(valueStr.length - 1);\n // 计算校验码\n const checkCode = sumCheckCode(preCode);\n\n return lastCode === String(checkCode);\n}\n\nexport default isBusinessLicense;\n","/**\n * 检测值是否类似Promise对象\n *\n * @static\n * @alias module:Validator.isPromiseLike\n * @since 3.8.0\n * @param {*} obj 要检测的值\n * @returns {boolean} 是否类似Promise对象\n * @example\n *\n * isPromiseLike([]); // false\n * isPromiseLike({ then: () => { } }); // true\n * isPromiseLike(Promise.resolve()); // true\n * \n */\nfunction isPromiseLike(obj) {\n return obj !== null && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n}\n\nexport default isPromiseLike;\n","import normalizeString from './normalizeString';\n\n// 港澳居民来往内地通行证正则\nconst regHMCard = /^[hm]{1}([0-9]{10}|[0-9]{8})$/i;\n\n/**\n * 检测值是否为港澳居民来往内地通行证,俗称回乡证或回乡卡。\n *\n * @static\n * @alias module:Validator.isHMCard\n * @since 4.0.0\n * @see 参考 {@link https://zh.wikipedia.org/wiki/港澳居民来往内地通行证|港澳居民来往内地通行证}\n * @param {*} value 要检测的值\n * @returns {boolean} 是否为港澳居民来往内地通行证\n * @example\n * // 第一代 11 位\n * isHMCard('h3203117707'); // true\n * isHMCard('H3203117707'); // true\n * isHMCard('m3203117707'); // true\n * isHMCard('M3203117707'); // true\n *\n * // 第二代 9 位\n * isHMCard('h32031177'); // true\n * isHMCard('H32031177'); // true\n * isHMCard('m32031177'); // true\n * isHMCard('M32031177'); // true\n */\nfunction isHMCard(value) {\n const valueStr = normalizeString(value);\n return regHMCard.test(valueStr);\n}\n\nexport default isHMCard;\n","import normalizeString from './normalizeString';\n\n// 台湾居民来往大陆通行证正则\nconst regTWCard = /^\\d{8}$/i;\n\n// 一次性短期台胞证\nconst singleRegTWCard = /^[\\da-z]{10,12}$/i;\n\n/**\n * 检测值是否为台湾居民来往大陆通行证,俗称台胞证。\n *\n * @static\n * @alias module:Validator.isTWCard\n * @since 4.0.0\n * @see 参考 {@link https://zh.wikipedia.org/wiki/台湾居民来往大陆通行证|台湾居民来往大陆通行证}\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.loose=false] 宽松模式。如果为true,表示支持一次性短期通行证\n * @returns {boolean} 是否为台湾居民来往大陆通行证\n * @example\n * \n * isTWCard('12345678'); // true\n * isTWCard('07257456'); // true\n *\n * // 一次性短期\n * isTWCard('F290299977'); // false\n * \n * // 宽松模式,支持一次性短期通行证\n * isTWCard('F290299977', { loose: true }); // true\n */\nfunction isTWCard(value, { loose = false } = {}) {\n const valueStr = normalizeString(value);\n if (regTWCard.test(valueStr)) {\n return true;\n }\n return loose ? singleRegTWCard.test(valueStr) : false;\n}\n\nexport default isTWCard;\n","import normalizeString from './normalizeString';\n\nconst reg = /^[A-Z]{6}[A-Z\\d]{2}(?:[A-Z\\d]{3})?$/;\n\n/**\n * 检测值是否为 Swift Code。8位或11位,前6位为大写字母,7-8位为大写字母或数字,9-11位为可选的大写字母或数字。\n *\n * @static\n * @alias module:Validator.isSwiftCode\n * @see 参考 {@link https://zh.wikipedia.org/wiki/ISO_9362|ISO 9362}\n * @since 4.9.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为 Swift Code\n * @example\n *\n * isSwiftCode('DEUTDEFF'); // true\n * isSwiftCode('deutdeff'); // false\n *\n * isSwiftCode('BKTWTWTP010'); // true\n * isSwiftCode('010BKTWTWTP'); // false\n *\n * isSwiftCode('ICBKCNBJBJM'); // true\n *\n */\nfunction isSwiftCode(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isSwiftCode;\n","// 最大安全数字\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n// 最小安全数字\nexport const MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\n","import isType from './isType';\n\n/**\n * 检查值是否为NaN\n *\n * @static\n * @alias module:Type.isNaN\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为NaN\n * @example\n *\n * isNaN(NaN)\n * // => true\n *\n * isNaN(1)\n * // => false\n */\nfunction _isNaN(value) {\n return isType(value, 'Number') && isNaN(value);\n}\n\nexport default _isNaN;\n","import isType from './isType';\n\n/**\n * 检查值是否为Number\n *\n * @static\n * @alias module:Type.isNumber\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为Number\n * @example\n *\n * isNumber(1)\n * // => true\n *\n * isNumber(Number.MIN_VALUE)\n * // => true\n *\n * isNumber(Infinity)\n * // => true\n *\n * isNumber(NaN)\n * // => true\n *\n * isNumber('1')\n * // => false\n */\nfunction isNumber(value) {\n return isType(value, 'Number');\n}\n\nexport default isNumber;\n","import isType from './isType';\n\n/**\n * 检查值是否为Symbol\n *\n * @static\n * @alias module:Type.isSymbol\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为Symbol\n * @example\n *\n * isSymbol(Symbol.iterator)\n * // => true\n *\n * isSymbol(\"abc\")\n * // => false\n */\nfunction isSymbol(value) {\n return isType(value, 'Symbol');\n}\n\nexport default isSymbol;\n","/**\n * 参考: https://github.com/nefe/number-precision/blob/master/src/index.ts\n *\n * 解决浮动运算问题,避免小数点后产生多位数和计算精度损失。\n * 问题示例:2.3 + 2.4 = 4.699999999999999,1.0 - 0.9 = 0.09999999999999998\n */\n\nimport { MAX_SAFE_INTEGER, MIN_SAFE_INTEGER } from './constants';\nimport devWarn from './devWarn';\nimport { isNumber, isString, isSymbol } from './type';\n\n/**\n * 将值转换为有效数值\n * \n * @param {*} value 要转换的值\n * @returns {number|string} 有效数值\n */\nexport function transformEffectiveNumber(value) {\n /** @type {string|number|undefined} */\n let ret;\n if (isString(value)) {\n ret = value.trim(); // ' 15' ' 15 ' 兼容 Number(string) 处理\n\n if (ret === '') {\n ret = Number(ret);\n } else if (Number.isNaN(Number(ret))) { // string如果可以转换为number,默认不转换为number类型\n ret = Number.NaN;\n }\n } else if (isSymbol(value)) {\n // 例如 Symbol 包装器对象将会报错\n // symObj = Object(Symbol());\n // Number(symObj); // TypeError: Cannot convert a Symbol value to a number\n ret = Number.NaN;\n } else if (!isNumber(value)) {\n // 其余非数字类型通过 Number 转换\n ret = Number(value);\n } else {\n ret = value;\n }\n\n if (Number.isNaN(ret)) {\n return Number.NaN;\n }\n\n // @ts-ignore\n return ret;\n}\n\n/**\n * 是否为科学计数法数字\n *\n * @param {string} num 检查值\n * @returns {boolean}\n */\nexport function isScientificNumber(num) {\n return /\\d+\\.?\\d*e[\\+\\-]*\\d+/i.test(num);\n}\n\n/**\n * 把错误的数据转正\n *\n * @param {number} num 输入数\n * @param {number} [precision=12] 小数点的精度\n * @returns {number}\n * @example\n *\n * strip(0.09999999999999998)=0.1\n */\nexport function strip(num, precision = 12) {\n return +parseFloat(num.toPrecision(precision));\n}\n\n/**\n * 计算数字的小数点长度,支持科学记数法\n *\n * @param {number|string} num 输入数\n * @returns {number} 小数点长度\n */\nexport function digitLength(num) {\n // Get digit length of e\n const eSplit = num.toString().split(/e/i);\n const len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0);\n return len > 0 ? len : 0;\n}\n\n/**\n * 把小数转成整数,支持科学计数法。如果是小数则放大成整数\n *\n * @param {number|string} num 输入数\n * @returns {number}\n */\nexport function float2Fixed(num) {\n const strNum = String(num);\n if (!isScientificNumber(strNum)) {\n return Number(strNum.replace('.', ''));\n }\n const dLen = digitLength(num);\n return dLen > 0 ? strip(+num * Math.pow(10, dLen)) : +num;\n}\n\n/**\n * 检测数字是否越界,如果越界给出提示\n * @param {number} num 输入数\n * @returns\n */\nexport function checkBoundary(num) {\n if (+num > MAX_SAFE_INTEGER || +num < MIN_SAFE_INTEGER) {\n devWarn(`${num} is beyond boundary when transfer to integer, the results may not be accurate`);\n }\n}\n\n/**\n * 去掉左边数字0\n *\n * @param {string} num 数字字符串\n * @returns {string}\n */\nexport function trimLeftZero(num) {\n const reg = /^([+-])?(0+)([0-9\\.]+)$/;\n const result = reg.exec(num);\n\n let sign;\n\n if (result) {\n sign = result[1] || '';\n return sign + (result[3][0] === '.' ? '0' + result[3] : result[3]);\n }\n\n return num;\n}\n\n/**\n * 科学计数法转换成普通数字\n *\n * JavaScript在以下情景会自动将数值转换为科学计数法:\n * 1.小数点前的数字个数大于等于22位\n * 2.小数点前边是0,小数点后十分位(包含十分位)之后连续零的个数大于等于6个\n *\n * @param {string | number} num 科学计数法数字\n * @returns {string | number} 转换后的数字字符串\n */\nexport function scientificToNumber(num) {\n const strNum = String(num);\n\n if (!isScientificNumber(strNum)) {\n return num;\n }\n\n /** @type string */\n let ret;\n\n const zero = '0';\n const parts = strNum.toLowerCase().split('e');\n const e = parts.pop(); // 存储指数\n // @ts-ignore\n const l = Math.abs(e); // 取绝对值,l-1就是0的个数\n // @ts-ignore\n const sign = e / l; //判断正负\n const coeff_array = parts[0].split('.'); // 将系数按照小数点拆分\n\n // 如果是小数\n if (sign === -1) {\n // 整数部分\n const intVal = trimLeftZero(coeff_array[0]);\n\n // 整数部分大于科学计数后面部分\n // 如: 10e-1, 10.2e-1\n if (intVal.length > l) {\n const thanLen = intVal.length - l;\n const dec = coeff_array[1] || '';\n\n ret = intVal.slice(0, thanLen);\n\n // 处理 10e-1, 100e-1\n if (intVal.slice(thanLen) !== '0' || dec) {\n ret += '.' + intVal.slice(thanLen) + dec;\n }\n } else {\n // 整数部分小于等于科学计数后面部分\n // 如: 1e-1, 0.2e-1, 1.2e-2, 1.2e-1\n ret = zero + '.' + new Array(l - intVal.length + 1).join(zero) + coeff_array.join('');\n }\n } else {\n // 小数部分\n const dec = coeff_array[1] || '';\n\n // 如果是整数,将整数除第一位之外的非零数字计入位数,相应的减少0的个数\n if (l - dec.length < 0) {\n ret = trimLeftZero(coeff_array[0] + dec.substring(0, l)) + '.' + dec.substring(l);\n } else {\n // 拼接字符串,如果是整数,不需要拼接小数点\n ret = coeff_array.join('') + new Array(l - dec.length + 1).join(zero);\n }\n }\n\n return trimLeftZero(ret);\n}\n\n","import { checkBoundary, scientificToNumber, isScientificNumber } from './utils/math.util';\nimport isNaN from './utils/type/isNaN';\nimport { trimLeftZero } from './utils/math.util';\nimport devWarn from './utils/devWarn';\n\nconst reg = /^[+-]?\\d*\\.?\\d*$/;\n\n/**\n * 检查数字或数字字符串\n *\n * @private\n * @param {string} num\n * @returns 是否为数字\n */\nfunction checkNumber(num) {\n if (!(reg.test(num) || isScientificNumber(num)) || isNaN(num) || (typeof num !== 'number' && typeof num !== 'string') || num === '') {\n devWarn(`${num} invalid parameter.`);\n\n return false;\n }\n\n // 数字超限如果不是是字符串,可能有异常\n // 如 1111111111111111111111 // => 1.1111111111111111e+21\n if (typeof num === 'number') {\n checkBoundary(num);\n }\n\n return true;\n}\n\n/**\n * 格式化整数部分\n *\n * @private\n * @param {string} intStr 数字字符串\n * @param {string} thousand 千分位符号\n * @returns 格式化后的值\n */\nfunction formatInt(intStr, thousand) {\n let txt = '';\n intStr = trimLeftZero(intStr);\n intStr = intStr[0] === '+' ? intStr.substring(1) : intStr; // 去掉+符号\n const negativeSymbol = Number(intStr) < 0 ? '-' : '';\n const reArr = negativeSymbol ? intStr.substring(1).split('').reverse() : intStr.split('').reverse();\n\n for (let i = 0; i < reArr.length; i++) {\n txt += reArr[i] + ((i + 1) % 3 === 0 && i + 1 !== reArr.length ? thousand : '');\n }\n\n return negativeSymbol + txt.split('').reverse().join('');\n}\n\n/**\n * 格式化小数部分,如果使用 toFixed,超大额数字会自动被截断\n *\n * @private\n * @param {string} decStr 小数点部分的字符串\n * @param {number} precision 保留位数\n * @param {string} decimal 小数点符号\n * @returns 格式化后的值\n */\nfunction formatDec(decStr, precision, decimal) {\n if (precision === 0) {\n return '';\n }\n\n const zero = 0;\n let ret = '';\n\n if (decStr && Number(decStr) > 0) {\n let tmpNum = parseFloat('0.' + decStr);\n ret = tmpNum.toFixed(precision).substring(2);\n } else {\n ret = zero.toFixed(precision).substring(2);\n }\n\n return decimal + ret;\n}\n\n/**\n * 格式化金额\n *\n * @static\n * @alias module:Processor.formatMoney\n * @since 1.1.0\n * @param {string | number} num 需转换金额 (最大:9007199254740991 最小: -9007199254740991)\n * @param {Object} [options] - 金额格式化配置\n * @param {string | number} [options.precision=2] - 保留位数 (最高:10位)\n * @param {string} [options.symbol] - 货币符号\n * @param {string} [options.thousand=\",\"] - 千分位符号\n * @param {string} [options.decimal=\".\"] - 小数位符号\n * @returns {string} 格式化的金额\n * @example\n *\n * // 整数\n * formatMoney('1000'); // 1,000.00\n *\n * // 小数(默认保留2位小数)\n * formatMoney('3000.03'); // 3,000.03\n *\n * // 保留4位小数\n * formatMoney('3000.0300', { precision: 4 }); // 3,000.0300\n *\n * // 保留10位小数\n * formatMoney('1500.2', { precision: 10 }); // 1,500.2000000000\n *\n * // 自定义单位符号\n * formatMoney(1000.00, { symbol: '$' }); // $1,000.00\n *\n * // 自定义千位分割符(默认',')\n * formatMoney(1000.00, { thousand: '|' }); // 1|000.00\n *\n * // 自定义小数位分割符(默认'.')\n * formatMoney(1000.00, { decimal: '&' }); // 1,000&00\n * \n */\nconst formatMoney = (num, { precision = 2, symbol, thousand = ',', decimal = '.' } = {}) => {\n // 数字参数不正确,返回空字符串\n // @ts-ignore\n if (!checkNumber(num)) {\n return '';\n }\n\n // 参数规整化\n if (typeof precision !== 'number' || isNaN(precision) || precision < 0) {\n precision = 2;\n } else if (precision > 10) {\n precision = 10;\n }\n symbol = typeof symbol === 'string' ? symbol : '';\n thousand = typeof thousand === 'string' ? thousand : ',';\n decimal = typeof decimal === 'string' ? decimal : '.';\n\n // 转换数字字符串,支持科学记数法\n const strNum = scientificToNumber(num) + '';\n // 整数和小数部分\n const [intStr, decStr] = strNum.split('.');\n\n return symbol + formatInt(intStr, thousand) + formatDec(decStr, precision, decimal);\n};\n\nexport default formatMoney;\n","import normalizeString from './normalizeString';\n\n/**\n * 格式化银行卡号\n *\n * @static\n * @alias module:Processor.formatBankCard\n * @since 1.1.0\n * @param {string} bankCardNo 要处理的字符串\n * @param {Object} [options] 配置项\n * @param {string} [options.char=\" \"] 间隔字符\n * @param {number} [options.length=4] 间隔长度\n * @returns {string} 格式化的银行卡号\n * @example\n *\n * // 19位银行卡\n * formatBankCard('6228480402564890018'); // 6228 4804 0256 4890 018\n *\n * // 16位银行卡\n * formatBankCard('6228480402564890'); // 6228 4804 0256 4890\n *\n * // 脱敏银行卡\n * formatBankCard('6228********890'); // 6228 **** **** 890\n *\n * // 16位银行卡,\"-\"间隔\n * formatBankCard('6228480402564890', {char: '-'}); // 6228-4804-0256-4890\n *\n */\nfunction formatBankCard(bankCardNo = '', { char = ' ', length = 4 } = {}) {\n const reg = new RegExp(`(.{${length}})`, 'g');\n const regChar = new RegExp(`${char}`, 'g');\n\n const realValue = normalizeString(bankCardNo).replace(regChar, '');\n const str = realValue.replace(reg, `$1${char}`);\n\n return realValue.length % length === 0 ? str.substring(0, str.length - 1) : str;\n}\n\nexport default formatBankCard;\n","import normalizeString from './normalizeString';\n\n/**\n * 替换字符,应用场景如:脱敏\n *\n * @static\n * @alias module:Processor.replaceChar\n * @since 1.1.0\n * @param {string} str 要处理的字符串\n * @param {Object} [options] 配置项\n * @param {number} [options.start=3] 开始位置\n * @param {number} [options.end=-4] 结束位置\n * @param {string} [options.char=\"*\"] 替换字符\n * @param {number} [options.repeat] 替换字符的重复次数,默认为替换内容长度,可设置为固定值\n * @param {string} [options.exclude] 排除字符,如果指定排除项,repeat设置无效\n * @returns {string} 处理后的字符\n * @example\n *\n * // 手机号\n * replaceChar('13000000000'); // 130****0000\n *\n * // 身份证\n * replaceChar('130701199310302288'); // 130***********2288\n *\n * // 邮箱\n * const email = '12345@qq.com'\n * replaceChar(email, {start: 2, end: email.indexOf('@'), repeat: 4}); // 12****@qq.com\n *\n * // 银行卡号\n * replaceChar('6228480402564890018', {start: 0, end: -4, repeat: 4}); // ****0018\n *\n * // 带格式的银行卡号,忽略空字符串\n * replaceChar('6228 4804 0256 4890 018', {start: 4, end: -4, exclude: ' '}); // 6228 **** **** **** 018\n *\n * // 用户名\n * replaceChar('林某某', {start: 1, end: Infinity, repeat: 2}); // 林**\n * replaceChar('林某', {start: 1, end: Infinity, repeat: 2}); // 林**\n * replaceChar('林某某某', {start: 1, end: Infinity, repeat: 2}); // 林**\n *\n */\nfunction replaceChar(str, { start = 3, end = -4, char = '*', repeat, exclude } = {}) {\n const realStr = normalizeString(str);\n const strLen = realStr.length;\n\n // 开始位置超过str长度\n if (Math.abs(start) >= strLen) {\n return realStr;\n }\n\n start = start >= 0 ? start : strLen + start;\n end = end >= 0 ? end : strLen + end;\n\n // 开始位置大于结束位置\n if (start >= end) {\n return realStr;\n }\n\n let middleStr = realStr.substring(start, end);\n\n if (exclude) {\n const reg = new RegExp(`[^${exclude}]`, 'g');\n middleStr = middleStr.replace(reg, char);\n } else {\n repeat = typeof repeat === 'number' && repeat >= 0 ? repeat : middleStr.length;\n middleStr = char.repeat(repeat);\n }\n\n return realStr.substring(0, start) + middleStr + realStr.substring(end);\n}\n\nexport default replaceChar;\n","import { checkBoundary } from './utils/math.util';\nimport devWarn from './utils/devWarn';\n\n// 简体\nconst chnNumberChar = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];\nconst chnUnitChar = ['', '十', '百', '千'];\n\n// 繁体\nconst big5NumberChar = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];\nconst big5UnitChar = ['', '拾', '佰', '仟'];\n\n// 数字字符、计数单位\n\n/**\n * @type {string[]}\n * @private\n */\nlet numberChar;\n\n/**\n * @type {string[]}\n * @private\n */\nlet unitChar;\n\n/**\n * @type {string[]}\n * @private\n */\nlet unitSection;\n\n/**\n * 每个小节的内部进行转化\n *\n * @private\n * @param {number} section 数字\n * @returns {string} 转化的数字\n */\nfunction sectionToChinese(section) {\n let str = '';\n let chnstr = '';\n let zero = false; //zero为是否进行补零, 第一次进行取余由于为个位数,默认不补零\n let unitPos = 0;\n\n while (section > 0) {\n // 对数字取余10,得到的数即为个位数\n let v = section % 10;\n\n //如果数字为零,则对字符串进行补零\n if (v == 0) {\n if (zero) {\n //如果遇到连续多次取余都是0,那么只需补一个零即可\n zero = false;\n chnstr = numberChar[v] + chnstr;\n }\n } else {\n //第一次取余之后,如果再次取余为零,则需要补零\n zero = true;\n str = numberChar[v];\n str += unitChar[unitPos];\n chnstr = str + chnstr;\n }\n unitPos++;\n section = Math.floor(section / 10);\n }\n return chnstr;\n}\n\n/**\n * 转换整数\n *\n * @private\n * @param {number} num 要转换的数字\n * @returns {string} 中文数字\n */\nfunction convertInteger(num) {\n let numInt = Math.floor(num);\n\n let unitPos = 0;\n let strIns = '';\n let chnStr = '';\n let needZero = false;\n\n if (numInt === 0) {\n return numberChar[0];\n }\n while (numInt > 0) {\n var section = numInt % 10000;\n if (needZero) {\n chnStr = numberChar[0] + chnStr;\n }\n strIns = sectionToChinese(section);\n strIns += section !== 0 ? unitSection[unitPos] : unitSection[0];\n chnStr = strIns + chnStr;\n needZero = section < 1000 && section > 0;\n numInt = Math.floor(numInt / 10000);\n unitPos++;\n }\n return chnStr;\n}\n\n/**\n * 转换小数\n *\n * @private\n * @param {number} num 要转换的数字\n */\nfunction convertDecimal(num) {\n const strNum = num + '';\n const index = strNum.indexOf('.');\n\n let ret = '';\n\n if (index > -1) {\n let decimalStr = strNum.slice(index + 1);\n ret = mapNumberChar(parseInt(decimalStr));\n }\n\n return ret;\n}\n\n/**\n * 映射为中文数字\n *\n * @private\n * @param {number} num 要处理的数字\n * @returns {string} 返回中文数字的映射\n */\nfunction mapNumberChar(num) {\n const strNum = num + '';\n let ret = '';\n\n for (let i = 0, len = strNum.length; i < len; i++) {\n ret += numberChar[parseInt(strNum[i])];\n }\n\n return ret;\n}\n\n/**\n * 数字转中文数字\n * 不在安全数字 -9007199254740991~9007199254740991 内,处理会有异常\n *\n * @static\n * @alias module:Processor.numberToChinese\n * @since 1.2.0\n * @param {number} num 数字\n * @param {Object} [options] 配置项\n * @param {boolean} [options.big5=false] 繁体\n * @param {boolean} [options.unit=true] 计数单位\n * @param {string} [options.decimal=\"点\"] 中文小数点,繁体字为點\n * @param {string} [options.zero=\"零\"] 设置0。常用配置 〇\n * @param {string} [options.negative=\"负\"] 负数前面的字\n * @param {Object} [options.unitConfig] 节点单位配置\n * @param {string} [options.unitConfig.w=\"万\"] 设置计数单位万。常用配置 萬\n * @param {string} [options.unitConfig.y=\"亿\"] 设置计数单位亿。常用配置 億\n * @returns {string} 中文数字\n * @example\n *\n * numberToChinese(100); // 一百\n * numberToChinese(100.3); // 一百点三\n * numberToChinese(1234567890); // 一十二亿三千四百五十六万七千八百九十\n * numberToChinese(1234567890.11); // 一十二亿三千四百五十六万七千八百九十点一一\n *\n * // 繁体\n * numberToChinese(100, {big5: true}); // 壹佰\n * numberToChinese(100.3, {big5: true}); // 壹佰點叁\n * numberToChinese(1234567890.11, {big5: true}); // 壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾點壹壹\n *\n * // 不带计数单位\n * numberToChinese(1990, {unit: false}); // 一九九零\n *\n * // 不带计数单位,修改0\n * numberToChinese(1990, {unit: false, zero:'〇'}); // 一九九〇\n *\n */\nfunction numberToChinese(num, { big5 = false, unit = true, decimal = '', zero = '', negative = '负', unitConfig = {} } = {}) {\n // 非数字 或 NaN 不处理\n if (typeof num !== 'number' || isNaN(num)) {\n devWarn(`参数错误 ${num},请传入数字`);\n\n return '';\n }\n\n // 超过安全数字提示\n checkBoundary(num);\n\n // 设置数字字符和计数单位\n if (big5) {\n numberChar = big5NumberChar.slice();\n unitChar = big5UnitChar.slice();\n decimal = decimal || '點';\n } else {\n numberChar = chnNumberChar.slice();\n unitChar = chnUnitChar.slice();\n decimal = decimal || '点';\n }\n\n // 设置节点计数单位,万、亿、万亿\n const unitWan = unitConfig?.w || '万';\n const unitYi = unitConfig?.y || '亿';\n const unitWanYi = unitWan + unitYi;\n unitSection = ['', unitWan, unitYi, unitWanYi];\n\n // 设置0\n if (zero) {\n numberChar[0] = zero;\n }\n\n // 前置字符,负数处理\n const preStr = num < 0 ? negative : '';\n\n // 整数和小数\n let chnInteger, chnDecimal;\n const numAbs = Math.abs(num);\n\n // 处理整数\n if (unit) {\n chnInteger = convertInteger(numAbs);\n } else {\n chnInteger = mapNumberChar(Math.floor(numAbs));\n }\n\n // 处理小数\n chnDecimal = convertDecimal(numAbs);\n\n return chnDecimal ? `${preStr}${chnInteger}${decimal}${chnDecimal}` : `${preStr}${chnInteger}`;\n}\n\nexport default numberToChinese;\n","/**\n * 字节转换存储单位,保留2位小数点\n *\n * @static\n * @alias module:Processor.bytesToSize\n * @since 3.8.0\n * @param {number} bytes 字节大小\n * @returns {string} 存储单位值\n * @example\n *\n * bytesToSize(0); // 0 B\n * bytesToSize(1024); // 1 KB\n * bytesToSize(3.213243*1024*1024); // 3.21 MB\n * bytesToSize(1024*1024*1024); // 1 GB\n * \n */\nfunction bytesToSize(bytes) {\n const numBytes = typeof bytes !== 'number' ? Number(bytes) : bytes;\n if (numBytes === 0 || isNaN(numBytes)) return '0 B';\n\n const k = 1024;\n // 存储单位\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(numBytes) / Math.log(k));\n\n return sizes[i] ? `${Number((numBytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}` : numBytes + '';\n}\n\nexport default bytesToSize;\n","const regIdCard = /^(?<province>\\d{2})(?<city>\\d{2})(?<area>\\d{2})(?<year>(?:\\d{2})?\\d{2})(?<month>\\d{2})(?<day>\\d{2})\\d{2}(?<gender>\\d)(?:\\d|X)?$/i;\n\nconst Provinces = [\n // 华北地区:北京市|110000,天津市|120000,河北省|130000,山西省|140000,内蒙古自治区|150000\n ['11', '北京市'],\n ['12', '天津市'],\n ['13', '河北省'],\n ['14', '山西省'],\n ['15', '内蒙古自治区'],\n\n // 东北地区: 辽宁省|210000,吉林省|220000,黑龙江省|230000\n ['21', '辽宁省'],\n ['22', '吉林省'],\n ['23', '黑龙江省'],\n\n // 华东地区: 上海市|310000,江苏省|320000,浙江省|330000,安徽省|340000,福建省|350000,江西省|360000,山东省|370000\n ['31', '上海市'],\n ['32', '江苏省'],\n ['33', '浙江省'],\n ['34', '安徽省'],\n ['35', '福建省'],\n ['36', '江西省'],\n ['37', '山东省'],\n\n // 华中地区: 河南省|410000,湖北省|420000,湖南省|430000\n ['41', '河南省'],\n ['42', '湖北省'],\n ['43', '湖南省'],\n\n // 华南地区:广东省|440000,广西壮族自治区|450000,海南省|460000\n ['44', '广东省'],\n ['45', '广西壮族自治区'],\n ['46', '海南省'],\n\n // 西南地区:重庆市|500000,四川省|510000,贵州省|520000,云南省|530000,西藏自治区|540000\n ['50', '重庆市'],\n ['51', '四川省'],\n ['52', '贵州省'],\n ['53', '云南省'],\n ['54', '西藏自治区'],\n\n // 西北地区: 陕西省|610000,甘肃省|620000,青海省|630000,宁夏回族自治区|640000,新疆维吾尔自治区|650000\n ['61', '陕西省'],\n ['62', '甘肃省'],\n ['63', '青海省'],\n ['64', '宁夏回族自治区'],\n ['65', '新疆维吾尔自治区'],\n\n // 台湾地区:台湾省|710000\n // 台湾居民公民身份号码地址码为830000,参考 http://www.wanweibaike.com/wiki-中华人民共和国行政区划代码_(7区)、https://zh.wikipedia.org/wiki/港澳台居民居住证\n ['71', '台湾省'],\n ['83', '台湾省'],\n\n // 港澳地区:香港特别行政区|810000,澳门特别行政区|820000\n ['81', '香港特别行政区'],\n ['82', '澳门特别行政区']\n];\n\n// 第一位数字是以前的大区制代码。第二位是大区所在省市编码。全国共分为8个大区:华北(1)、东北(2)、华东(3)、中南(4)、西南(5)、西北(6)、台湾(7)和港澳(8)。\n// const Regions = [\n// ['1', '华北地区'],\n// ['2', '东北地区'],\n// ['3', '华东地区'],\n// ['4', '中南地区'],\n// ['5', '西南地区'],\n// ['6', '西北地区'],\n// ['7', '台湾地区'],\n// ['8', '港澳地区']\n// ];\n\n/**\n * @typedef {Object} IdCardOrigin - 解析身份证原数据\n * @property {string} province - 省份编码\n * @property {string} city - 城市编码\n * @property {string} area - 地区编码\n * @property {string} year - 出生年\n * @property {string} month - 出生月\n * @property {string} day - 出生日\n * @property {string} gender - 性别 能整除2为女,否则为男\n */\n\n/**\n * @typedef {Object} IdCardInfo - 身份证信息\n * @property {string} province - 省份\n * @property {string} birthday - 生日\n * @property {string} gender - 性别\n * @property {IdCardOrigin} origin - 解析身份证原数据\n */\n\n/**\n * 解析身份证号码,支持15、18位身份证号码\n *\n * @static\n * @alias module:Processor.parseIdCard\n * @since 4.0.0\n * @see 参考 {@link https://baike.baidu.com/item/居民身份证号码|居民身份证号码}\n * @param {string} id 身份证号码,支持15位\n * @returns {null|IdCardInfo} null 或 省份、生日、性别,省/市/区/年/月/日/性别编码\n * @example\n * \n * parseIdCard('123456789123456'); // null\n *\n * // 18位身份证号码\n * parseIdCard('130701199310302288'); \n * // =>\n * {\n * birthday: \"1993-10-30\",\n * gender: \"女\",\n * origin: { province: \"13\", city: \"07\", area: \"01\", year: \"1993\", month: \"10\", day: \"30\", gender: \"8\" },\n * province: \"河北省\"\n * }\n *\n * // 15位身份证号码\n * parseIdCard('130701931030228');\n * // =>\n * {\n * birthday: \"93-10-30\",\n * gender: \"女\",\n * origin: { province: \"13\", city: \"07\", area: \"01\", year: \"93\", month: \"10\", day: \"30\", gender: \"8\" },\n * province: \"河北省\"\n * }\n *\n */\nfunction parseIdCard(id) {\n if (!regIdCard.test(id)) {\n return null;\n }\n\n /** @type {RegExpExecArray} */\n // @ts-ignore\n const info = regIdCard.exec(id);\n\n /** @type {{ province: string, city: string, area: string, year: string, month: string, day: string, gender: string }} */\n // @ts-ignore\n const origin = info?.groups || {\n province: info[1],\n city: info[2],\n area: info[3],\n year: info[4],\n month: info[5],\n day: info[6],\n gender: info[7]\n };\n\n const province = Provinces.find((item) => item[0] === origin.province);\n\n if (!province) {\n return null;\n }\n\n const birthday = `${origin.year}-${origin.month}-${origin.day}`;\n const gender = Number(origin.gender) % 2 === 0 ? '女' : '男';\n // const region = Regions.find(item => item[0] === origin.province?.substring(0, 1));\n\n return {\n // region,\n province: province[1],\n birthday,\n gender,\n origin\n };\n}\n\nexport default parseIdCard;\n","// file、blob文件如何预览图片?\n// 方法1:将file或者blob类型文件转成base64数据,再作为src赋值给img标签\n// 方法2:使用 window.URL.createObjectURL(blob) 为blob、file 创建一个指向该参数对象的URL\n\n/**\n * 将 Blob 或 File 对象转成 data:URL 格式的 Base64 字符串。\n *\n * @static\n * @alias module:Processor.blobToDataURL\n * @see 参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader/readAsDataURL|FileReader.readAsDataURL()}\n * @since 4.1.0\n * @param {Blob} blob Blob 或 File 对象\n * @returns {Promise<string>} data:URL 格式的 Base64 字符串。\n * @example\n * const aFileParts = ['<a id=\"a\"><b id=\"b\">hey!</b></a>']; // 一个包含DOMString的数组\n * const htmlBlob = new Blob(aFileParts, { type: 'text/html' }); // 得到 blob\n *\n * blobToDataURL(htmlBlob).then(data=>{\n * console.log(data); // data:text/html;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * });\n *\n * const textBlob = new Blob(aFileParts, { type: 'text/plain' });\n *\n * blobToDataURL(textBlob).then(data=>{\n * console.log(data); // data:text/plain;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * });\n */\nfunction blobToDataURL(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n // @ts-ignore\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(error);\n });\n}\n\nexport default blobToDataURL;\n","/**\n * 将 DataURL 转为 Blob 对象\n *\n * @static\n * @alias module:Processor.dataURLToBlob\n * @see 参考 {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Base64|Base64}\n * @since 4.1.0\n * @param {string} dataurl data: 协议的URL\n * @returns {Blob} Blob 对象\n * @example\n * const dataurl = 'data:text/html;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=';\n * dataURLToBlob(dataurl); // Blob {size: 32, type: 'text/html'}\n */\nfunction dataURLToBlob(dataurl) {\n const arr = dataurl.split(',');\n // @ts-ignore\n const mime = arr[0].match(/:(.*?);/)[1];\n const bstr = atob(arr[1]);\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new Blob([u8arr], { type: mime });\n}\n\nexport default dataURLToBlob;\n","/**\n * 设置 DataURL 前缀、MIME 类型、base64 标识。<br/>\n * 如果你需要获取DataURL 的 MIME 类型和数据本身,推荐使用 <a href=\"https://www.npmjs.com/package/data-urls\">data-urls</a>。\n *\n * @static\n * @alias module:Processor.setDataURLPrefix\n * @see 参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/Data_URIs|Data URLs}\n * @see 参考 {@link https://mimesniff.spec.whatwg.org/#understanding-mime-types|MIME types}\n * @since 4.1.0\n * @param {string} data 数据本身\n * @param {string} [mimetype=\"image/png\"] MIME 类型\n * @param {boolean} [base64=true] 添加 base64 标识\n * @returns {string} DataURL 格式的字符串\n * @example\n * \n * const data = 'PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=';\n * setDataURLPrefix(data); // data:image/png;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * setDataURLPrefix(data, 'image/png', false); // data:image/png,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * setDataURLPrefix(data, 'image/jpg'); // data:image/jpg;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * setDataURLPrefix(data, 'text/html'); // data:text/html;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * setDataURLPrefix(data, ''); // data:;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * setDataURLPrefix(data, '', false); // data:,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * \n */\nfunction setDataURLPrefix(data, mimetype = 'image/png', base64 = true) {\n return `data:${mimetype}${base64 ? ';base64' : ''},${data}`;\n}\n\nexport default setDataURLPrefix;\n","import isNil from './utils/type/isNil';\n\n// TODO: 函数重载,类型参照 Date\n\n/**\n * 创建一个 Date 实例日期对象,同 new Date() 。<br/>\n * 规避了苹果设备浏览器不支持部分格式(YYYY-MM-DD HH-mm 或 YYYY.MM.DD)。\n *\n * @static\n * @alias module:Processor.safeDate\n * @see 参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date|Date}\n * @since 4.4.0\n * @param {string|number|Date} [value] 日期时间字符串、毫秒数、日期对象\n * @param {...number} args 月/日/时/分/秒/毫秒\n * @returns {Date} Date 实例日期对象\n * @example\n * \n * safeDate('2022-1-1'); // Sat Jan 01 2022 00:00:00 GMT+0800 (中国标准时间)\n * safeDate('2022/1/1'); // Sat Jan 01 2022 00:00:00 GMT+0800 (中国标准时间)\n * safeDate('2022.1.1'); // Sat Jan 01 2022 00:00:00 GMT+0800 (中国标准时间)\n * safeDate('2022.1.1 11:11'); // Sat Jan 01 2022 11:11:00 GMT+0800 (中国标准时间)\n * safeDate(99, 1); // Mon Feb 01 1999 00:00:00 GMT+0800 (中国标准时间)\n * safeDate(1646711233171); // Tue Mar 08 2022 11:47:13 GMT+0800 (中国标准时间)\n * \n *\n */\nfunction safeDate(value, ...args) {\n const safeValue = typeof value === 'string' ? value.replace(/[\\\\.-]/g, '/') : value;\n\n if (args && args.length > 0) {\n // @ts-ignore\n return new Date(safeValue, ...args);\n }\n\n // @ts-ignore\n return isNil(safeValue) ? new Date() : new Date(safeValue);\n}\n\nexport default safeDate;\n","import normalizeString from './normalizeString';\n\n/**\n * 格式化手机号码\n *\n * @static\n * @alias module:Processor.formatMobile\n * @since 4.5.0\n * @param {string} mobileNo 手机号码\n * @param {object} [options] 配置项\n * @param {string} [options.char=' '] 间隔字符\n * @returns {string} 格式化后的手机号码\n * @example\n * \n * formatMobile('13345678900'); // 133 4567 8900\n * formatMobile('13345678900', { char: '-' }); // 133-4567-8900\n *\n * // 脱敏手机号码\n * formatMobile('133****1234'); // 133 **** 1234\n * formatMobile('133****1234', { char: '-' }); // 133-****-1234\n *\n * // 手机号码位数不够\n * formatMobile('133'); // 133\n * formatMobile('133456'); // 133 456\n * formatMobile('13345678'); // 133 4567 8\n * \n */\nfunction formatMobile(mobileNo, { char = ' ' } = {}) {\n const regChar = new RegExp(char, 'g');\n const realValue = normalizeString(mobileNo).replace(regChar, '').substring(0, 11);\n\n if (realValue.length > 7) {\n return realValue.replace(/^(...)(....)/g, `$1${char}$2${char}`);\n }\n if (realValue.length > 3) {\n return realValue.replace(/^(...)/g, `$1${char}`);\n }\n return realValue;\n}\n\nexport default formatMobile;\n","import normalizeString from './normalizeString';\n\n/**\n * 前置补零\n *\n * @static\n * @alias module:Processor.padZero\n * @since 4.7.0\n * @param {string|number} value 要处理的值\n * @param {number} [size=2] 指定字符串长度\n * @returns {string} 用零填充数字到给定长度的字符串\n * @example\n * padZero(5); // 05\n * padZero('5'); // 05\n *\n * padZero(12); // 12\n * padZero('12'); // 12\n *\n * padZero(688); // 688\n * padZero('688'); // 688\n *\n * padZero(688, 5); // 00688\n * padZero('688', 5); // 00688\n * \n */\nfunction padZero(value, size = 2) {\n const str = normalizeString(value);\n const len = str.length;\n\n if (typeof size !== 'number' || size < 0) {\n size = 0;\n }\n\n if (len < size) {\n return '0'.repeat(size - len) + str;\n }\n return str;\n}\n\nexport default padZero;\n","import { digitLength, float2Fixed, checkBoundary, transformEffectiveNumber } from './utils/math.util';\n\n/**\n * 精确乘法,支持多个数相乘,乘数默认为 1 。\n *\n * @static\n * @alias module:Math.times\n * @since 3.1.0\n * @param {...number|string} nums 相乘的数\n * @returns {number} 乘积\n * @example\n *\n * times(3, 0.6); // 1.8\n * times(3, 0.6, 2); // 3.6\n * times(3, 0.6, 2, 10); // 36\n * \n */\nfunction times(...nums) {\n let [num1, num2 = 1, ...rest] = nums;\n if (rest.length > 0) {\n return times(times(num1, num2), ...rest);\n }\n\n num1 = transformEffectiveNumber(num1);\n num2 = transformEffectiveNumber(num2);\n\n // 兼容处理,如果参数包含无效数值时,返回 NaN\n // @ts-ignore\n if (isNaN(num1) || isNaN(num2)) {\n return Number.NaN;\n }\n\n const num1Changed = float2Fixed(num1);\n const num2Changed = float2Fixed(num2);\n const baseNum = digitLength(num1) + digitLength(num2);\n const leftValue = num1Changed * num2Changed;\n\n checkBoundary(leftValue);\n\n return leftValue / Math.pow(10, baseNum);\n}\n\nexport default times;\n","import { digitLength, transformEffectiveNumber } from './utils/math.util';\nimport times from './times';\n\n/**\n * 精确加法,支持多个数相加,加数默认为 0 。\n *\n * @static\n * @alias module:Math.plus\n * @since 3.1.0\n * @param {...number|string} nums 相加的数\n * @returns {number} 总和\n * @example\n *\n * plus(0.1, 0.2); // 0.3\n * plus(0.1, 0.2, 0.3); // 0.6\n * plus(0.1, 0.2, 0.3, 0.4); // 1\n * \n */\nfunction plus(...nums) {\n let [num1, num2 = 0, ...rest] = nums;\n\n if (rest.length > 0) {\n return plus(plus(num1, num2), ...rest);\n }\n\n num1 = transformEffectiveNumber(num1);\n num2 = transformEffectiveNumber(num2);\n\n // 兼容处理,如果参数包含无效数值时,返回 NaN\n // @ts-ignore\n if (isNaN(num1) || isNaN(num2)) {\n return Number.NaN;\n }\n\n const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));\n return (times(num1, baseNum) + times(num2, baseNum)) / baseNum;\n}\n\nexport default plus;\n","import { digitLength, transformEffectiveNumber } from './utils/math.util';\nimport times from './times';\n\n/**\n * 精确减法,支持多个数相减,减数默认为 0 。\n *\n * @static\n * @alias module:Math.minus\n * @since 3.1.0\n * @param {...number|string} nums 相减的数\n * @returns {number} 差\n * @example\n *\n * minus(1, 0.9); // 0.1\n * minus(1, 0.9, 0.02); // 0.08\n * minus(1, 0.9, 0.02, 0.08); // 0\n * \n */\nfunction minus(...nums) {\n let [num1, num2 = 0, ...rest] = nums;\n\n if (rest.length > 0) {\n return minus(minus(num1, num2), ...rest);\n }\n\n num1 = transformEffectiveNumber(num1);\n num2 = transformEffectiveNumber(num2);\n\n // 兼容处理,如果参数包含无效数值时,返回 NaN\n // @ts-ignore\n if (isNaN(num1) || isNaN(num2)) {\n return Number.NaN;\n }\n\n const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));\n return (times(num1, baseNum) - times(num2, baseNum)) / baseNum;\n}\n\nexport default minus;\n","import { strip, digitLength, float2Fixed, checkBoundary, transformEffectiveNumber } from './utils/math.util';\nimport times from './times';\n\n/**\n * 精确除法,支持多个数相除,除数默认为 1 。\n *\n * @static\n * @alias module:Math.divide\n * @since 3.1.0\n * @param {...number|string} nums 被除数和除数\n * @returns {number} 商数\n * @example\n *\n * divide(1.21); // 1.21 除数默认为 1 ,即 1.21/1 = 1.21\n * divide(1.21, 1.1); // 1.1\n * divide(1000, 10, 10); // 10\n * divide(1000, 10, 10, 10); // 1\n * \n * divide(); // NaN 如果没有传入参数,被除数默认为 undefined 。 Number(undefined) 转换为 NaN ,NaN/1 = NaN\n * divide(null); // 0 Number(null) 转换为 0 , 0/1 = 0\n * divide('1.5 ', 0.5); // 3 Number('1.5 ') 转换为 1.5 ,1.5/0.5 = 3\n * \n */\nfunction divide(...nums) {\n let [num1, num2 = 1, ...rest] = nums;\n\n if (rest.length > 0) {\n return divide(divide(num1, num2), ...rest);\n }\n\n num1 = transformEffectiveNumber(num1);\n num2 = transformEffectiveNumber(num2);\n\n // 兼容处理,如果参数包含无效数值时,返回 NaN\n // @ts-ignore\n if (isNaN(num1) || isNaN(num2)) {\n return Number.NaN;\n }\n\n const num1Changed = float2Fixed(num1);\n const num2Changed = float2Fixed(num2);\n checkBoundary(num1Changed);\n checkBoundary(num2Changed);\n // fix: 类似 10 ** -4 为 0.00009999999999999999,strip 修正\n return times(num1Changed / num2Changed, strip(Math.pow(10, digitLength(num2) - digitLength(num1))));\n}\n\nexport default divide;\n","import divide from './divide';\nimport times from './times';\nimport { transformEffectiveNumber } from './utils/math.util';\n\n/**\n * 四舍五入,支持设置精度\n *\n * @static\n * @alias module:Math.round\n * @since 3.1.0\n * @param {number|string} num 要四舍五入的数字\n * @param {number} [precision=0] 四舍五入的精度\n * @returns {number} 四舍五入的数字\n * @example\n *\n * round(4.006); // 4\n * round(4.006, 2); // 4.01\n * round(4060, -2); // 4100\n * \n */\nfunction round(num, precision = 0) {\n num = transformEffectiveNumber(num);\n\n // 兼容处理,如果参数包含无效数值时,返回 NaN\n // @ts-ignore\n if (isNaN(num)) {\n return Number.NaN;\n }\n\n const base = Math.pow(10, precision);\n return divide(Math.round(times(num, base)), base);\n}\n\nexport default round;\n","/**\n * 等待时间返回 Promise 。常用于异步方法中延时。\n *\n * @static\n * @alias module:Other.waitTime\n * @since 4.2.0\n * @param {number} [time=1000] 延时时间,单位毫秒\n * @returns {Promise<void>}\n * @example\n * \n * const test = async ()=>{\n * await waitTime();\n * // do something\n * }\n *\n * waitTime(500).then(()=>{\n * // do something\n * });\n * \n */\nfunction waitTime(time = 1000) {\n return new Promise((resolve) => {\n setTimeout(resolve, time);\n });\n}\n\nexport default waitTime;\n","import normalizeString from './normalizeString';\n\n// 参考了: https://github.com/ant-design/ant-design-mobile/blob/v2/components/input-item/index.tsx#L240\n\n/**\n * 计算输入框的值格式化后光标位置\n *\n * @static\n * @alias module:Other.calculateCursorPosition\n * @since 4.6.0\n * @see 格式化手机号码 {@link https://doly-dev.github.io/util-helpers/module-Processor.html#.formatMobile|formatMobile}\n * @see 格式化银行卡号 {@link https://doly-dev.github.io/util-helpers/module-Processor.html#.formatBankCard|formatBankCard}\n * @see h5示例 {@link https://2950v9.csb.app/|点击查看}\n * @see react示例 {@link https://33ccy9.csb.app/|点击查看}\n * @param {number} prevPos 赋值前的光标位置,onChange/onInput的光标位置 e.target.selectionEnd\n * @param {string} prevCtrlValue 上一个格式化后的值\n * @param {string} rawValue 当前输入原值\n * @param {string} ctrlValue 当前格式化后的值\n * @param {Object} [options] 配置项\n * @param {string[]|string} [options.placeholderChar=' '] 占位符\n * @param {RegExp} [options.maskReg=/\\D/g] 需要遮盖的字符规则。默认去掉非数字,意味着 ctrlValue 需要去掉非数字。\n * @param {'mobile'|'bankCard'} [options.type] 格式化类型,内置手机号码和银行卡号特殊处理\n * @returns {number} 格式化后的光标位置\n */\nfunction calculateCursorPosition(prevPos, prevCtrlValue, rawValue, ctrlValue, { placeholderChar = ' ', maskReg = /\\D/g, type } = {}) {\n const realCtrlValue = normalizeString(prevCtrlValue);\n const realRawValue = normalizeString(rawValue);\n const placeholderChars = Array.isArray(placeholderChar) ? placeholderChar : [placeholderChar];\n\n const editLength = realRawValue.length - realCtrlValue.length;\n const isAddition = editLength > 0;\n\n let pos = prevPos;\n\n if (isAddition) {\n const additionStr = realRawValue.substring(pos - editLength, pos);\n let ctrlCharCount = additionStr.replace(maskReg, '').length;\n pos -= editLength - ctrlCharCount;\n\n let placeholderCharCount = 0;\n while (ctrlCharCount > 0) {\n if (placeholderChars.indexOf(ctrlValue.charAt(pos - ctrlCharCount + placeholderCharCount)) !== -1) {\n placeholderCharCount++;\n } else {\n ctrlCharCount--;\n }\n }\n pos += placeholderCharCount;\n }\n\n if ((type === 'mobile' && (pos === 4 || pos === 9)) || (type === 'bankCard' && pos > 0 && pos % 5 === 0)) {\n pos -= 1;\n }\n\n return pos;\n}\n\nexport default calculateCursorPosition;\n","const numberChars = '0123456789';\nconst letterChars = 'abcdefghijklmnopqrstuvwxyz';\nconst defaultChars = numberChars + letterChars + letterChars.toUpperCase();\n\n/**\n * @private\n * @param {number} [len=0] 长度\n * @param {string} [optionalChars] 允许的字符,默认为数字和大小写字母\n * @param {string} [prefix=''] 前缀部分,不计入长度\n * @returns {string}\n */\nfunction internalRandomString(len = 0, optionalChars = defaultChars, prefix = '') {\n while (len-- > 0) {\n const r = optionalChars[Math.floor(Math.random() * optionalChars.length)];\n return internalRandomString(len, optionalChars, prefix + r);\n }\n return prefix;\n}\n\n/**\n * 生成随机字符串\n *\n * @static\n * @alias module:Other.randomString\n * @since 4.8.0\n * @param {number} [len=0] 长度\n * @param {string} [optionalChars='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'] 允许的字符,默认为数字和大小写字母\n * @returns {string} 随机字符串\n * @example\n * \n * randomString(5); // slk23\n * randomString(8); // 71mHqo2A\n *\n * // 自定义允许的字符\n * randomString(5, 'abc'); // ccbcb\n * randomString(8, 'abcefg'); // bcgcfabg\n * \n */\nfunction randomString(len = 0, optionalChars) {\n let realLen = typeof len === 'number' ? len : Number(len);\n if (isNaN(realLen)) {\n realLen = 0;\n }\n\n const realChars = typeof optionalChars === 'string' && optionalChars ? optionalChars : defaultChars;\n\n return internalRandomString(len, realChars);\n}\n\nexport default randomString;\n","import normalizeString from './normalizeString';\n\n/**\n * 获取字符长度。中文汉字占2个字符,英文占1个字符,特殊如emoji占4个字符。\n *\n * @static\n * @alias module:Other.strlen\n * @since 4.10.0\n * @param {string} str 字符串\n * @returns {number} 字符长度\n * @example\n *\n * strlen('你好a'); // 5\n * strlen('你好,世界!'); // 12\n * strlen('严両丞丽'); // 8\n * strlen('abcde'); // 5\n * strlen('𠮷'); // 4\n * strlen('🍎'); // 4\n *\n */\nfunction strlen(str) {\n const realStr = normalizeString(str);\n let len = 0;\n for (let i = 0; i < realStr.length; i++) {\n const c = realStr.charCodeAt(i);\n if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {\n len++;\n } else {\n len += 2;\n }\n }\n return len;\n}\n\nexport default strlen;\n"],"names":["isUndefined","value","isNull","isNil","toString","Object","prototype","isType","typename","call","isString","convertToString","String","normalizeString","reg","isMobile","valueStr","test","isTelephone","isPostcode","regIdCard","check","id","index","sum","num","Math","pow","Number","toUpperCase","isIdCard","loose","checkCode","length","isEmail","isQQ","isWX","isVehicle","regLoose","sumCheckCode","numStr","numArr","replace","split","reverse","i","currNum","parseInt","mod","isBankCard","luhn","validateResult","precode","substring","baseReg","baseCodeArr","preCode","total","findIndex","item","wf","remainder","checkCodeIndex","isSocialCreditCode","options","cc","needCheckCode","passBaseRule","lastCode","config","disableWarning","setDisableWarning","bool","devWarn","console","warn","regNumber","regLowerCaseLetter","regUpperCaseLetter","regAllNumberAndLetter","hasNumber","val","hasLowerCaseLetter","hasUpperCaseLetter","hasHex","indexOf","hasSpecialCharacter","chars","specialChars","regChars","RegExp","ret","some","charItem","hasUnallowableCharacter","validatePassword","level","ignoreCase","special","valStr","currentLevel","containesNumber","containesLowerCaseLetter","containesUpperCaseLetter","containesSpecialCharacter","containesUnallowableCharacter","validated","containes","number","lowerCaseLetter","upperCaseLetter","specialCharacter","unallowableCharacter","isPassword","isPassport","chineseDictionary","chineseBasic","chineseExtend","chineseExtendA","chineseExtendB","chineseExtendC","chineseExtendD","chineseExtendE","chineseExtendF","looseChineseRegExp","chineseRegExp","chineseWithExtend","looseChineseExtendRegExp","chineseExtendRegExp","supportRegExpUnicode","hasOwnProperty","isChinese","useExtend","basicRegExp","extendRegExp","hasExtend","resultRegExp","flag","undefined","isIPv4","isIPv6","isUrl","retNum","pj","j","sj","sj10","pj1","isBusinessLicense","isPromiseLike","obj","then","regHMCard","isHMCard","regTWCard","singleRegTWCard","isTWCard","isSwiftCode","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","_isNaN","isNaN","isNumber","isSymbol","transformEffectiveNumber","trim","NaN","isScientificNumber","strip","precision","parseFloat","toPrecision","digitLength","eSplit","len","float2Fixed","strNum","dLen","checkBoundary","trimLeftZero","result","exec","sign","scientificToNumber","zero","parts","toLowerCase","e","pop","l","abs","coeff_array","intVal","thanLen","dec","slice","Array","join","checkNumber","formatInt","intStr","thousand","txt","negativeSymbol","reArr","formatDec","decStr","decimal","tmpNum","toFixed","formatMoney","symbol","formatBankCard","bankCardNo","char","regChar","realValue","str","replaceChar","start","end","repeat","exclude","realStr","strLen","middleStr","chnNumberChar","chnUnitChar","big5NumberChar","big5UnitChar","numberChar","unitChar","unitSection","sectionToChinese","section","chnstr","unitPos","v","floor","convertInteger","numInt","strIns","chnStr","needZero","convertDecimal","decimalStr","mapNumberChar","numberToChinese","big5","unit","negative","unitConfig","unitWan","w","unitYi","y","unitWanYi","preStr","chnInteger","chnDecimal","numAbs","bytesToSize","bytes","numBytes","k","sizes","log","Provinces","parseIdCard","info","origin","groups","province","city","area","year","month","day","gender","find","birthday","blobToDataURL","blob","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","onerror","error","dataURLToBlob","dataurl","arr","mime","match","bstr","atob","n","u8arr","Uint8Array","charCodeAt","Blob","type","setDataURLPrefix","data","mimetype","base64","safeDate","safeValue","args","Date","formatMobile","mobileNo","padZero","size","times","nums","num1","num2","rest","num1Changed","num2Changed","baseNum","leftValue","plus","max","minus","divide","round","base","waitTime","time","setTimeout","calculateCursorPosition","prevPos","prevCtrlValue","rawValue","ctrlValue","placeholderChar","maskReg","realCtrlValue","realRawValue","placeholderChars","isArray","editLength","isAddition","pos","additionStr","ctrlCharCount","placeholderCharCount","charAt","numberChars","letterChars","defaultChars","internalRandomString","optionalChars","prefix","r","random","randomString","realChars","strlen","c"],"mappings":";;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAASA,WAAT,CAAqBC,KAArB,EAA4B;EAC1B,SAAOA,KAAK,KAAK,KAAK,CAAtB;EACD;;ECrBD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAASC,MAAT,CAAgBD,KAAhB,EAAuB;EACrB,SAAOA,KAAK,KAAK,IAAjB;EACD;;ECfD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACA,SAASE,KAAT,CAAeF,KAAf,EAAsB;EACpB,SAAOD,WAAW,CAACC,KAAD,CAAX,IAAsBC,MAAM,CAACD,KAAD,CAAnC;EACD;;ECdD,IAAMG,QAAQ,GAAGC,MAAM,CAACC,SAAP,CAAiBF,QAAlC;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACA,SAASG,MAAT,CAAgBN,KAAhB,EAAuBO,QAAvB,EAAiC;EAC/B,SAAOJ,QAAQ,CAACK,IAAT,CAAcR,KAAd,wBAAoCO,QAApC,MAAP;EACD;;ECXD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACA,SAASE,QAAT,CAAkBT,KAAlB,EAAyB;EACvB,SAAOM,MAAM,CAACN,KAAD,EAAQ,QAAR,CAAb;EACD;;EClBD;EACA;EACA;EACA;EACA;EACA;;EACA,SAASU,eAAT,CAAyBV,KAAzB,EAAgC;EAC9B,SAAOS,QAAQ,CAACT,KAAD,CAAR,GAAkBA,KAAlB,GAA0BW,MAAM,CAACX,KAAD,CAAvC;EACD;;ECPD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACA,SAASY,eAAT,CAAyBZ,KAAzB,EAAgC;EAC9B,MAAIE,KAAK,CAACF,KAAD,CAAT,EAAkB;EAChB,WAAO,EAAP;EACD;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"}
|
|
1
|
+
{"version":3,"file":"util-helpers.js","sources":["../src/utils/type/isUndefined.js","../src/utils/type/isNull.js","../src/utils/type/isNil.js","../src/utils/type/isType.js","../src/utils/type/isString.js","../src/utils/convertToString.js","../src/normalizeString.js","../src/isMobile.js","../src/isTelephone.js","../src/isPostcode.js","../src/isIdCard.js","../src/isEmail.js","../src/isQQ.js","../src/isWX.js","../src/isVehicle.js","../src/isBankCard.js","../src/isSocialCreditCode.js","../src/utils/config.js","../src/utils/devWarn.js","../src/validatePassword.js","../src/isPassword.js","../src/isPassport.js","../src/isChinese.js","../src/isIPv4.js","../src/isIPv6.js","../src/isUrl.js","../src/isBusinessLicense.js","../src/isPromiseLike.js","../src/isHMCard.js","../src/isTWCard.js","../src/isSwiftCode.js","../src/utils/constants.js","../src/utils/type/isNaN.js","../src/utils/type/isNumber.js","../src/utils/type/isSymbol.js","../src/utils/math.util.js","../src/formatMoney.js","../src/formatBankCard.js","../src/replaceChar.js","../src/numberToChinese.js","../src/bytesToSize.js","../src/parseIdCard.js","../src/blobToDataURL.js","../src/dataURLToBlob.js","../src/setDataURLPrefix.js","../src/safeDate.js","../src/formatMobile.js","../src/padZero.js","../src/times.js","../src/plus.js","../src/minus.js","../src/divide.js","../src/round.js","../src/waitTime.js","../src/calculateCursorPosition.js","../src/randomString.js","../src/strlen.js"],"sourcesContent":["/**\n * 检查值是否为Undefined\n *\n * @static\n * @alias module:Type.isUndefined\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为Undefined\n * @example\n *\n * isUndefined(undefined)\n * // => true\n *\n * isUndefined(void 0)\n * // => true\n *\n * isUndefined(null)\n * // => false\n */\nfunction isUndefined(value) {\n return value === void 0;\n}\n\nexport default isUndefined;\n","/**\n * 检查值是否为Null\n *\n * @static\n * @alias module:Type.isNull\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为Null\n * @example\n *\n * isNull(null)\n * // => true\n *\n * isNull(void 0)\n * // => false\n */\nfunction isNull(value) {\n return value === null;\n}\n\nexport default isNull;\n","import isUndefined from './isUndefined';\nimport isNull from './isNull';\n\n/**\n * 检查值是否为 undefined 或 null\n *\n * @static\n * @alias module:Type.isNaN\n * @since 4.3.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为 undefined 或 null\n */\nfunction isNil(value) {\n return isUndefined(value) || isNull(value);\n}\n\nexport default isNil;\n","const toString = Object.prototype.toString;\n\n/**\n * 检测值的 `toString` 类型\n *\n * @private\n * @since 1.1.0\n * @param {*} value 检查值\n * @param {string} typename 类型名称\n * @returns {boolean} 返回值的 `toString` 类型是否匹配\n */\nfunction isType(value, typename) {\n return toString.call(value) === `[object ${typename}]`;\n}\n\nexport default isType;\n","import isType from './isType';\n\n/**\n * 检查值是否为String\n *\n * @static\n * @alias module:Type.isString\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为String\n * @example\n *\n * isString('abc')\n * // => true\n *\n * isString(1)\n * // => false\n */\nfunction isString(value) {\n return isType(value, 'String');\n}\n\nexport default isString;\n","import isString from './type/isString';\n\n/**\n * 转换为字符串\n *\n * @param {*} value 值\n * @returns {string} 字符串\n */\nfunction convertToString(value) {\n return isString(value) ? value : String(value);\n}\n\nexport default convertToString;\n","import isNil from './utils/type/isNil';\nimport convertToString from './utils/convertToString';\n\n/**\n * 规整化字符串。如果值为 undefined 或 null 将转为空字符串,如果值不是字符串类型将转为字符串。\n *\n * @static\n * @alias module:Processor.normalizeString\n * @see 参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String#string_instances|String}\n * @since 4.3.0\n * @param {*} value 待处理的值\n * @returns {string} 规整化的值\n * @example\n * \n * normalizeString(); // ''\n * normalizeString(undefined); // ''\n * normalizeString(void 0); // ''\n * normalizeString(null); // ''\n *\n * normalizeString(true); // 'true'\n * normalizeString(NaN); // 'NaN'\n * normalizeString(1); // '1'\n * normalizeString('a'); // 'a'\n * \n */\nfunction normalizeString(value) {\n if (isNil(value)) {\n return '';\n }\n return convertToString(value);\n}\n\nexport default normalizeString;\n","import normalizeString from './normalizeString';\n\n// 手机号码 11位数字,以1开头,第二位是3456789其中一个,后面再加9个数字\nconst reg = /^1[3456789]\\d{9}$/;\n\n/**\n * 检测值是否为手机号码\n *\n * @static\n * @alias module:Validator.isMobile\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为手机号码\n * @example\n *\n * isMobile('13000000000'); // true\n * isMobile('13000'); // false\n *\n */\nfunction isMobile(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isMobile;\n","import normalizeString from './normalizeString';\n\n// 固定电话 支持区号和分机号 3~4位区号,以0开头;7~8位直播号,以2~9开头;1~6位分机号\nconst reg = /^(0\\d{2,3}\\-)?([2-9]\\d{6,7})(\\-\\d{1,6})?$/;\n\n/**\n * 检测值是否为固定电话\n *\n * @static\n * @alias module:Validator.isTelephone\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为固定电话\n * @example\n *\n * isTelephone('22033212'); // true\n * isTelephone('13000000000'); // false\n * \n * // 含区号\n * isTelephone('021-22033212'); // true\n *\n * // 含区号和分机号\n * isTelephone('021-22033212-123'); // true\n *\n */\nfunction isTelephone(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isTelephone;\n","import normalizeString from './normalizeString';\n\n// 邮政编码\nconst reg = /^\\d{6}$/;\n\n/**\n * 检测值是否为邮政编码,6位数字\n *\n * @static\n * @alias module:Validator.isPostcode\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为邮政编码\n * @example\n *\n * isPostcode('101111'); // true\n * isPostcode('123'); // false\n *\n */\nfunction isPostcode(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isPostcode;\n","import normalizeString from './normalizeString';\n\n// 身份证号正则\nconst regIdCard = /^[1-9]\\d{5}(19|20)?\\d{2}((0[1-9])|(1[012]))(([0-2][1-9])|10|20|30|31)\\d{3}(\\d|X)?$/i;\n\n/**\n * 校验码计算\n *\n * @private\n * @see 参考 {@link https://zh.wikipedia.org/wiki/中华人民共和国公民身份号码|中华人民共和国公民身份号码}\n * @see 参考 {@link https://baike.baidu.com/item/居民身份证号码|居民身份证号码}\n * @param {string} id 身份证号码\n * @returns {boolean} 校验码是否正确\n */\nfunction check(id) {\n let index, sum, num;\n for (sum = index = 0; index < 17; index++) {\n sum += (Math.pow(2, 17 - index) % 11) * Number(id[index]);\n }\n num = (12 - (sum % 11)) % 11;\n if (num < 10) {\n return num === Number(id[17]);\n } else {\n return id[17].toUpperCase() === 'X';\n }\n}\n\n/**\n * 检测值是否为18位身份证号码。<br/>宽松模式下,支持15位身份证号码\n *\n * @static\n * @alias module:Validator.isIdCard\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.loose=false] 宽松模式,支持15位身份证号码\n * @param {boolean} [options.checkCode=true] 是否校验最后一位校验码,仅支持18位身份证号码\n * @returns {boolean} 值是否为身份证号\n * @example\n *\n * isIdCard('130701199310302288'); // true\n * isIdCard('13070119931030228X'); // false\n *\n * // 不校验校验码\n * isIdCard('13070119931030228X', { checkCode: false }); // true\n *\n * // 默认不支持15位身份证号码\n * isIdCard('320311770706001'); // false\n * \n * // 宽松模式,支持15位身份证号\n * isIdCard('320311770706001', { loose: true }); // true\n *\n */\nfunction isIdCard(value, options = {}) {\n const { loose = false, checkCode = true } = options;\n\n const valueStr = normalizeString(value);\n if (valueStr.length === 15 && loose) {\n return regIdCard.test(valueStr);\n }\n\n if (valueStr.length === 18 && regIdCard.test(valueStr)) {\n if (checkCode) {\n return check(valueStr);\n }\n return true;\n }\n\n return false;\n}\n\nexport default isIdCard;\n","import normalizeString from './normalizeString';\n\n// 邮箱\nconst reg = /^[\\da-z]+([\\-\\.\\_]?[\\da-z]+)*@[\\da-z]+([\\-\\.]?[\\da-z]+)*(\\.[a-z]{2,})+$/i;\n\n/**\n * 检测值是否为Email\n *\n * @static\n * @alias module:Validator.isEmail\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为Email\n * @example\n *\n * isEmail('1232@qq.com'); // true\n * isEmail('123@'); // false\n *\n */\nfunction isEmail(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isEmail;\n","import normalizeString from './normalizeString';\n\n// QQ号正则\nconst reg = /^[1-9]\\d{4,10}$/;\n\n/**\n * 检测值是否为QQ号,非0开头,5至11位数字\n *\n * @static\n * @alias module:Validator.isQQ\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为QQ号\n * @example\n *\n * isQQ('12345'); // true\n * isQQ('123'); // false\n *\n */\nfunction isQQ(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isQQ;\n","import normalizeString from './normalizeString';\n\n// 微信号 6至20位,以字母开头,字母,数字,减号(连接符),下划线\nconst reg = /^[a-z]([-_a-z0-9]{5,19})+$/i;\n\n/**\n * 检测值是否为微信号\n *\n * @static\n * @alias module:Validator.isWX\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为微信号\n * @example\n *\n * isWX('a12345'); // true\n * isWX('123'); // false\n *\n */\nfunction isWX(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isWX;\n","import normalizeString from './normalizeString';\n\n// 车牌号正则\nconst reg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([A-Z0-9]{4}[A-Z0-9挂学警港澳]{1})|([A-Z0-9]{5}[DF])|([DF][A-Z0-9]{5}))$/;\n\n/**\n * 检测值是否为车牌号,支持新能源和非新能源车牌\n *\n * @static\n * @alias module:Validator.isVehicle\n * @see 参考 {@link https://baike.baidu.com/item/车牌号|车牌号}\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为车牌号\n * @example\n *\n * isVehicle('京L12345'); // true\n * isVehicle('京L1234学'); // true\n * isVehicle('BL1234警'); // true\n * \n * // 新能源车牌\n * isVehicle('粤BD12345'); // true\n * isVehicle('粤BF12345'); // true\n * isVehicle('粤B12345D'); // true\n * isVehicle('粤B12345F'); // true\n *\n */\nfunction isVehicle(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isVehicle;\n","import normalizeString from './normalizeString';\n\n// 非0开头,10~21位数字\nconst reg = /^[1-9]\\d{9,20}$/;\n\n// 8~30位数字\nconst regLoose = /^\\d{8,30}$/;\n\n/**\n * luhn 计算校验位\n * @private\n * @param {string} numStr 银行卡前面数字\n * @returns {number}\n */\nfunction sumCheckCode(numStr) {\n const numArr = (numStr + '').replace(/\\D/g, '').split('').reverse();\n\n let sum = 0;\n for (let i = 0; i < numArr.length; i++) {\n const currNum = parseInt(numArr[i]);\n sum += i % 2 === 0 ? currNum * 2 - (currNum > 4 ? 9 : 0) : currNum;\n }\n const mod = sum % 10;\n return mod !== 0 ? 10 - mod : 0;\n}\n\n/**\n * 检测值是否为银行卡号。正常模式(非0开头,10~21位数字)宽松模式(8~30位数字)\n *\n * @static\n * @alias module:Validator.isBankCard\n * @see 参考 {@link https://kf.qq.com/faq/170112ABnm6b170112FvquAn.html|常用银行账号位数参考}\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.loose=false] 宽松模式,8~30位数字\n * @param {boolean} [options.luhn=false] 使用 Luhn 算法校验校验码\n * @returns {boolean} 值是否为银行卡号\n * @example\n *\n * isBankCard('6228480402564890018'); // true\n * isBankCard('6228480402564890'); // true\n * isBankCard('123456789'); // false\n * \n * // 宽松模式\n * isBankCard('123456789', { loose: true }); // true\n *\n */\nfunction isBankCard(value, options = {}) {\n const { loose = false, luhn = false } = options;\n\n const valueStr = normalizeString(value);\n const validateResult = loose ? regLoose.test(valueStr) : reg.test(valueStr);\n\n if (validateResult && luhn) {\n const precode = valueStr.substring(0, valueStr.length - 1);\n const checkCode = valueStr[valueStr.length - 1];\n return checkCode === String(sumCheckCode(precode));\n }\n return validateResult;\n}\n\nexport default isBankCard;\n","import normalizeString from './normalizeString';\n\n// 基础规则,由18位数字和大写字母组成,不使用I、O、Z、S、V。\nconst baseReg = /^[\\dA-HJ-NPQRTUWXY]{2}\\d{6}[\\dA-HJ-NPQRTUWXY]{10}$/;\n\n// 基础字符组成\nconst baseCodeArr = '0123456789ABCDEFGHJKLMNPQRTUWXY'.split('');\n\n/**\n * 计算校验码\n *\n * @private\n * @since 1.1.0\n * @param {string} preCode 统一代码前17位\n * @returns {string} 校验码\n */\nfunction sumCheckCode(preCode) {\n let total = 0;\n\n // 计算字符位置对应序号和加权因子的乘积,总和\n for (let i = 0; i < 17; i++) {\n // 字符位置对应的基础编码序号\n const index = baseCodeArr.findIndex((item) => item === preCode[i]);\n // 加权因子\n const wf = Math.pow(3, i) % 31;\n // 计算序号和加权因子的乘积,并计算级数之和\n total += index * wf;\n }\n\n // 计算整数求余函数MOD\n const remainder = total % 31;\n // 校验码字符值序号\n const checkCodeIndex = remainder !== 0 ? 31 - remainder : 0;\n\n return baseCodeArr[checkCodeIndex];\n}\n\n/**\n * 检测值是否为统一社会信用代码,也叫三证合一组织代码。由18位数字和大写字母组成,不使用I、O、Z、S、V。\n *\n * @static\n * @alias module:Validator.isSocialCreditCode\n * @see 参考 {@link https://zh.wikisource.org/zh-hans/GB_32100-2015_法人和其他组织统一社会信用代码编码规则|GB 32100-2015 法人和其他组织统一社会信用代码编码规则}\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.checkCode=true] 是否校验最后一位校验码,如果为false,不校验校验位。\n * @returns {boolean} 值是否为统一社会信用代码\n * @example\n *\n * isSocialCreditCode('91350100M000100Y43'); // true\n * isSocialCreditCode('91350100M000100Y4A'); // false\n *\n * // 不校验校验位,长度和类型还是有校验的\n * isSocialCreditCode('91350100M000100Y4A', { checkCode: false }); // true\n * isSocialCreditCode('91350100M000100YIO', { checkCode: false }); // false\n * isSocialCreditCode('91350100M000100Y', { checkCode: false }); // false\n *\n */\nfunction isSocialCreditCode(value, options = {}) {\n const valueStr = normalizeString(value);\n // @ts-ignore\n // TODO 下个版本废弃 loose\n const { loose = false, checkCode: cc = true } = options;\n const needCheckCode = !loose && cc;\n\n const passBaseRule = baseReg.test(valueStr);\n\n // 宽松模式 或 基础规则不通过直接返回\n if (!needCheckCode || !passBaseRule) {\n return passBaseRule;\n }\n\n // 前17位\n const preCode = valueStr.substring(0, 17);\n // 校验码\n const lastCode = valueStr.substring(valueStr.length - 1);\n // 计算校验码\n const checkCode = sumCheckCode(preCode);\n\n return lastCode === checkCode;\n}\n\nexport default isSocialCreditCode;\n","// @ts-ignore\nimport { version } from '../../package.json';\n\nconst config = {\n // 禁用warning提示\n disableWarning: true\n};\n\n/**\n * 设置禁止warning提示\n * @static\n * @alias module:Debug.formatBankCard\n * @since 3.6.1\n * @param {boolean} bool 是否禁止warning提示\n */\nfunction setDisableWarning(bool) {\n config.disableWarning = !!bool;\n}\n\nexport { config, setDisableWarning, version };\n","import { config } from './config';\n\n/**\n * 打印警告信息\n *\n * @param {any[]} args 打印的信息\n */\nfunction devWarn(...args) {\n if (!config.disableWarning) {\n console.warn(...args);\n }\n}\n\nexport default devWarn;\n","import devWarn from './utils/devWarn';\n\nconst regNumber = /[\\d]/;\nconst regLowerCaseLetter = /[a-z]/;\nconst regUpperCaseLetter = /[A-Z]/;\nconst regAllNumberAndLetter = /[\\d|a-z]/gi;\n\n/**\n * 是否包含数字\n *\n * @private\n * @param {string} val 检查的值\n * @returns {boolean} 是否包含数字\n */\nfunction hasNumber(val) {\n return regNumber.test(val);\n}\n\n/**\n * 是否包含小写字母\n *\n * @private\n * @param {string} val 检测的值\n * @returns {boolean} 是否包含小写字母\n */\nfunction hasLowerCaseLetter(val) {\n return regLowerCaseLetter.test(val);\n}\n\n/**\n * 是否包含大写字母\n *\n * @private\n * @param {string} val 检测的值\n * @returns {boolean} 是否包含大写字母\n */\nfunction hasUpperCaseLetter(val) {\n return regUpperCaseLetter.test(val);\n}\n\n/**\n * 是否为十六进制\n *\n * @private\n * @param {string} val 检测的值\n * @returns {boolean} 是否为十六进制\n */\nfunction hasHex(val) {\n return val.indexOf('\\\\x') > -1 || val.indexOf('\\\\u') > -1;\n}\n\n/**\n * 是否包含特殊字符\n *\n * @private\n * @param {string} val 检测的值\n * @param {string} chars 特殊字符\n * @returns {boolean} 是否包含特殊字符\n */\nfunction hasSpecialCharacter(val, chars) {\n if (!chars || !val) {\n return false;\n }\n\n const specialChars = val.replace(regAllNumberAndLetter, '');\n\n if (!specialChars) {\n return false;\n }\n\n const regChars = hasHex(chars) ? new RegExp(`[${chars}]`) : null;\n\n if (regChars) {\n return regChars.test(specialChars);\n }\n\n let ret = false;\n specialChars.split('').some((charItem) => {\n if (chars.indexOf(charItem) > -1) {\n ret = true;\n }\n return ret;\n });\n return ret;\n}\n\n/**\n * 是否包含非法字符\n *\n * @private\n * @param {string} val 检测的值\n * @param {string} chars 特殊字符\n * @returns {boolean} 是否包含非法字符\n */\nfunction hasUnallowableCharacter(val, chars) {\n if (!val) {\n return false;\n }\n\n const specialChars = val.replace(regAllNumberAndLetter, '');\n\n if (!specialChars) {\n return false;\n } else if (!chars) {\n return true;\n }\n\n const regChars = hasHex(chars) ? new RegExp(`[^${chars}]`) : null;\n if (regChars) {\n return regChars.test(specialChars);\n }\n let ret = false;\n specialChars.split('').some((charItem) => {\n if (chars.indexOf(charItem) === -1) {\n ret = true;\n }\n return ret;\n });\n return ret;\n}\n\n/**\n * @typedef {Object} PasswordContaines - 验证密码的包含内容\n * @property {boolean} number - 包含数字\n * @property {boolean} lowerCaseLetter - 包含小写字母\n * @property {boolean} upperCaseLetter - 包含大写字母\n * @property {boolean} specialCharacter - 包含特殊字符\n * @property {boolean} unallowableCharacter - 包含非法字符\n */\n\n/**\n * @typedef {Object} ValidatePasswordReturn - 验证结果\n * @property {boolean} validated - 验证结果,根据密码强度、是否包含非法字符得出\n * @property {number} level - 强度级别,包含数字/大小写字母/特殊字符\n * @property {PasswordContaines} containes - 包含内容\n */\n\n/**\n * 验证密码(数字、大小写字母、特殊字符、非法字符)\n *\n * @see 参考 {@link https://baike.baidu.com/item/ASCII#3|ASCII}\n * @static\n * @alias module:Validator.validatePassword\n * @since 3.7.0\n * @param {string} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {number} [options.level=2] 密码强度 1-包含一种字符 2-包含两种字符 3-包含三种字符。(大写字母、小写字母、数字、特殊字符)\n * @param {boolean} [options.ignoreCase=false] 是否忽略大小写,为 ture 时,大小写字母视为一种字符\n * @param {string} [options.special=\"!@#$%^&*()-=_+[]\\|{},./?<>~\"] 支持的特殊字符\n * @returns {ValidatePasswordReturn} 验证结果\n * @example\n *\n * validatePassword('a12345678');\n * // =>\n * {\n * validated: true, // 验证结果,根据密码强度、是否包含非法字符得出\n * level: 2, // 强度级别\n * containes: {\n * number: true, // 包含数字\n * lowerCaseLetter: true, // 包含小写字母\n * upperCaseLetter: false, // 包含大写字母\n * specialCharacter: false, // 包含特殊字符\n * unallowableCharacter: false // 包含非法字符\n * }\n * }\n *\n * validatePassword('a12345678', { level: 3 });\n * // =>\n * {\n * validated: false,\n * level: 2,\n * containes: {\n * number: true,\n * lowerCaseLetter: true,\n * upperCaseLetter: false,\n * specialCharacter: false,\n * unallowableCharacter: false\n * }\n * }\n *\n * validatePassword('_Aa一二三45678', { level: 3, ignoreCase: true });\n * // =>\n * {\n * validated: false,\n * level: 3,\n * containes: {\n * number: true,\n * lowerCaseLetter: true,\n * upperCaseLetter: true,\n * specialCharacter: true,\n * unallowableCharacter: true\n * }\n * }\n *\n * // 自定义特殊字符\n * validatePassword('_Aa一二三45678', { level: 3, ignoreCase: true, special: '_一二三' });\n * // =>\n * {\n * validated: true,\n * level: 3,\n * containes: {\n * number: true,\n * lowerCaseLetter: true,\n * upperCaseLetter: true,\n * specialCharacter: true,\n * unallowableCharacter: false\n * }\n * }\n */\nfunction validatePassword(value, options = {}) {\n const { level = 2, ignoreCase = false, special = '\\\\x21-\\\\x2F\\\\x3A-\\\\x40\\\\x5B-\\\\x60\\\\x7B-\\\\x7E' } = options;\n\n let valStr = value;\n\n if (typeof value !== 'string') {\n devWarn(`[validatePassword] value must be a string.`);\n valStr = '';\n }\n\n let currentLevel = 0;\n\n // 包含数字\n const containesNumber = hasNumber(valStr);\n // 包含小写字母\n const containesLowerCaseLetter = hasLowerCaseLetter(valStr);\n // 包含大写字母\n const containesUpperCaseLetter = hasUpperCaseLetter(valStr);\n // 包含特殊字符\n const containesSpecialCharacter = hasSpecialCharacter(valStr, special);\n // 包含非法字符,即含有非数字字母特殊字符以外的其他字符\n const containesUnallowableCharacter = hasUnallowableCharacter(valStr, special);\n\n if (containesNumber) {\n currentLevel += 1;\n }\n\n // 不区分大小写\n if (ignoreCase) {\n if (containesLowerCaseLetter || containesUpperCaseLetter) {\n currentLevel += 1;\n }\n } else {\n // 区分大小写\n if (containesLowerCaseLetter) {\n currentLevel += 1;\n }\n if (containesUpperCaseLetter) {\n currentLevel += 1;\n }\n }\n\n if (containesSpecialCharacter) {\n currentLevel += 1;\n }\n\n // 验证结果\n const validated = currentLevel >= level && !containesUnallowableCharacter;\n\n return {\n validated,\n level: currentLevel,\n containes: {\n number: containesNumber,\n lowerCaseLetter: containesLowerCaseLetter,\n upperCaseLetter: containesUpperCaseLetter,\n specialCharacter: containesSpecialCharacter,\n unallowableCharacter: containesUnallowableCharacter\n }\n };\n}\n\nexport default validatePassword;\n","import validatePassword from './validatePassword';\n\n/**\n * 检测值是否符合密码强度\n * <p><strong>注意:该校验只校验是否存在不同字符(大小写字母、数字、特殊符号),不判断长度。</strong></p>\n * <p><i>如果需要更细致的验证,请使用 <a href=\"#.validatePassword\">validatePassword</a></i></p>\n *\n * @see 参考 {@link https://baike.baidu.com/item/ASCII#3|ASCII}\n * @static\n * @alias module:Validator.isPassword\n * @since 1.1.0\n * @requires module:Validator.validatePassword\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {number} [options.level=2] 密码强度 1-包含一种字符 2-包含两种字符 3-包含三种字符。(大写字母、小写字母、数字、特殊字符)\n * @param {boolean} [options.ignoreCase=false] 是否忽略大小写,为 ture 时,大小写字母视为一种字符\n * @param {string} [options.special=\"!@#$%^&*()-=_+[]\\|{},./?<>~\"] 支持的特殊字符\n * @returns {boolean} 值是否符合密码强度\n * @example\n *\n * isPassword('a12345678'); // true\n * \n * // 3级密码强度\n * isPassword('a12345678', {level: 3}); // false\n * isPassword('Aa12345678', {level: 3}); // true\n * \n * // 3级密码强度,大小写字符仅计算1级强度\n * isPassword('Aa12345678', {level: 3, ignoreCase: true}); // false\n * isPassword('_Aa12345678', {level: 3, ignoreCase: true}); // true\n *\n * // 仅支持 数字、字母、特殊字符,其他非法字符如中文字符是校验不通过的\n * isPassword('_Aa一二三45678', {level: 3, ignoreCase: true}); // false\n * isPassword(' _Aa12345678', {level: 3, ignoreCase: true}); // false\n * \n */\nfunction isPassword(value, options = {}) {\n const { level = 2, ignoreCase = false, special = '\\\\x21-\\\\x2F\\\\x3A-\\\\x40\\\\x5B-\\\\x60\\\\x7B-\\\\x7E' } = options;\n\n return validatePassword(value, { level, ignoreCase, special }).validated;\n}\n\nexport default isPassword;\n","import normalizeString from './normalizeString';\n\n// 护照号 9位,包括首字母和数字;支持 普通护照(E*)、外交护照(DE)、公务护照(SE)、公务普通护照(PE)、香港特区护照(K/KJ/H*)、澳门特区护照(MA/MB/M*)\nconst reg = /^((e[\\da-z])|(de)|(se)|(pe)|([khm][\\da-z]))[\\da-z]{7}$/i;\n\n/**\n * 检测值是否为护照号\n * 支持普通护照(E*)、外交护照(DE)、公务护照(SE)、公务普通护照(PE)、香港特区护照(K/KJ/H*)、澳门特区护照(MA/MB/M*),注意不区分大小写\n *\n * @static\n * @alias module:Validator.isPassport\n * @see 参考 {@link https://zh.wikipedia.org/wiki/中华人民共和国护照#个人资料页|中华人民共和国护照#个人资料页}\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为护照号\n * @example\n *\n * isPassport('E12345678'); // true\n * isPassport('abc'); // false\n *\n */\nfunction isPassport(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isPassport;\n","import normalizeString from './normalizeString';\n\nconst chineseDictionary = {\n // 基本汉字\n chineseBasic: '[\\u4e00-\\u9fa5]',\n\n // 基本汉字补充\n chineseExtend: '[\\u9ea6-\\u9fef]',\n\n // 汉字扩展A\n chineseExtendA: '[\\u3400-\\u4DB5]',\n\n // 汉字扩展B\n chineseExtendB: '[\\u{20000}-\\u{2A6D6}]',\n\n // 汉字扩展C\n chineseExtendC: '[\\u{2A700}-\\u{2B734}]',\n\n // 汉字扩展D\n chineseExtendD: '[\\u{2B740}-\\u{2B81D}]',\n\n // 汉字扩展E\n chineseExtendE: '[\\u{2B820}-\\u{2CEA1}]',\n\n // 汉字扩展F\n chineseExtendF: '[\\u{2CEB0}-\\u{2EBE0}]'\n};\n\nconst looseChineseRegExp = chineseDictionary.chineseBasic + '+';\nconst chineseRegExp = '^' + chineseDictionary.chineseBasic + '+$';\n\nconst chineseWithExtend = '(?:' + chineseDictionary.chineseBasic + '|' + chineseDictionary.chineseExtend + '|' + chineseDictionary.chineseExtendA + '|' + chineseDictionary.chineseExtendB + '|' + chineseDictionary.chineseExtendC + '|' + chineseDictionary.chineseExtendD + '|' + chineseDictionary.chineseExtendE + '|' + chineseDictionary.chineseExtendF + ')';\nconst looseChineseExtendRegExp = chineseWithExtend + '+';\nconst chineseExtendRegExp = '^' + chineseWithExtend + '+$';\n\n// eslint-disable-next-line no-prototype-builtins\nconst supportRegExpUnicode = RegExp.prototype.hasOwnProperty('unicode');\n\n/**\n * 检测值是否为中文\n *\n * @static\n * @alias module:Validator.isChinese\n * @since 1.1.0\n * @see 参考 {@link http://www.unicode.org/reports/tr38/#BlockListing|4.4 Listing of Characters Covered by the Unihan Database}\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.loose=false] 宽松模式。如果为true,只要包含中文即为true\n * @param {boolean} [options.useExtend=false] 使用统一表意文字扩展A-F。注意:如果不支持 `RegExp.prototype.unicode`,扩展字符集将自动不生效,如IE浏览器。\n * @returns {boolean} 值是否为中文\n * @example\n *\n * isChinese('林某某'); // true\n * isChinese('林A'); // false\n *\n * // 宽松模式,只要包含中文即为true\n * isChinese('林A', { loose: true }); // true\n * isChinese('A林A', { loose: true }); // true\n *\n * // 扩展字符集的字符\n * isChinese('𠮷'); // false\n * \n * // 使用中文扩展字符集,需要浏览器支持 RegExp.prototype.unicode 才生效。\n * isChinese('𠮷', { useExtend: true }); // true\n * isChinese('𠮷aa', { useExtend: true, loose: true }); // true\n * \n */\nfunction isChinese(value, options = {}) {\n const { loose = false, useExtend = false } = options;\n\n const valueStr = normalizeString(value);\n const basicRegExp = loose ? looseChineseRegExp : chineseRegExp;\n const extendRegExp = loose ? looseChineseExtendRegExp : chineseExtendRegExp;\n\n const hasExtend = useExtend && supportRegExpUnicode;\n const resultRegExp = hasExtend ? extendRegExp : basicRegExp;\n const flag = hasExtend ? 'u' : undefined;\n const reg = new RegExp(resultRegExp, flag);\n return reg.test(valueStr);\n}\n\nexport default isChinese;\n","import normalizeString from './normalizeString';\n\n// ipv4正则\nconst reg = /^((\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/;\n\n/**\n * 检测值是否为ipv4\n *\n * @static\n * @alias module:Validator.isIPv4\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为ipv4\n * @example\n *\n * isIPv4('192.168.1.1'); // true\n * isIPv4('255.255.255.255'); // true\n * isIPv4('256.256.256.256'); // false\n * isIPv4('0.0'); // false\n *\n */\nfunction isIPv4(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isIPv4;\n","import normalizeString from './normalizeString';\n\n// ipv6正则\nconst reg = /^((([0-9A-F]{1,4}:){7}([0-9A-F]{1,4}|:))|(([0-9A-F]{1,4}:){6}(:[0-9A-F]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3})|:))|(([0-9A-F]{1,4}:){5}(((:[0-9A-F]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3})|:))|(([0-9A-F]{1,4}:){4}(((:[0-9A-F]{1,4}){1,3})|((:[0-9A-F]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3}))|:))|(([0-9A-F]{1,4}:){3}(((:[0-9A-F]{1,4}){1,4})|((:[0-9A-F]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3}))|:))|(([0-9A-F]{1,4}:){2}(((:[0-9A-F]{1,4}){1,5})|((:[0-9A-F]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3}))|:))|(([0-9A-F]{1,4}:){1}(((:[0-9A-F]{1,4}){1,6})|((:[0-9A-F]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3}))|:))|(:(((:[0-9A-F]{1,4}){1,7})|((:[0-9A-F]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})){3}))|:)))(%.+)?$/i;\n\n/**\n * 检测值是否为ipv6\n *\n * @static\n * @alias module:Validator.isIPv6\n * @since 1.1.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为ipv6\n * @example\n *\n * // 冒分十六进制表示法\n * isIPv6('2001:0DB8:0000:0023:0008:0800:200C:417A'); // true\n *\n * // 前导0省略\n * isIPv6('2001:DB8:0:23:8:800:200C:417A'); // true\n * isIPv6('FF01:0:0:0:0:0:0:1101'); // true\n *\n * // 0位压缩表示法\n * isIPv6('FF01::1101'); // true\n * isIPv6('::1'); // true\n * isIPv6('::'); // true\n * isIPv6('0:0:0:0:0:0:0:1'); // true\n * isIPv6('0:0:0:0:0:0:0:0'); // true\n *\n * // 内嵌IPv4地址表示法\n * isIPv6('::192.168.1.1'); // true\n * isIPv6('::FFFF:192.168.1.1'); // true\n * isIPv6('192.168.1.1'); // false\n *\n */\nfunction isIPv6(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isIPv6;\n","import normalizeString from './normalizeString';\n\n// url正则\nconst reg = /(((^https?:(?:\\/\\/)?)(?:[-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9.-]+(?::\\d+)?|(?:www.|[-;:&=\\+\\$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[\\+~%\\/.\\w-_]*)?\\??(?:[-\\*\\+=&;%@.\\w_]*)#?(?:[\\w]*))?)$/;\n\n/**\n * 检测值是否为url\n *\n * @static\n * @alias module:Validator.isUrl\n * @since 3.4.0\n * @see 参考 {@link https://zh.wikipedia.org/wiki/统一资源定位符|统一资源定位符}\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为url\n * @example\n *\n * isUrl(''); // false\n * isUrl('8.8.8.8'); // false\n * isUrl('example.com'); // true\n * isUrl('http://example.com'); // true\n * isUrl('https://example.com:8080'); // true\n * isUrl('http://www.example.com/test/123'); // true\n * isUrl('http://www.example.com/test/123?foo=bar'); // true\n * \n */\nfunction isUrl(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isUrl;\n","import normalizeString from './normalizeString';\n\n// 基础规则,由14位数字本体码和1位数字校验码组成,其中本体码从左至右依次为:6位首次登记机关码、8位顺序码。\nconst baseReg = /^\\d{15}$/;\n\n/**\n * 计算校验码\n *\n * @private\n * @since 3.5.0\n * @param {string} preCode 营业执照前14位\n * @returns {number} 校验码\n */\nfunction sumCheckCode(preCode) {\n let retNum; // 校验位数字\n\n let pj = 10; // Pj+1 11,初始为10\n\n for (let j = 0; j < 14; j++) {\n const sj = pj + Number(preCode[j]);\n let sj10 = sj % 10;\n sj10 = sj10 === 0 ? 10 : sj10;\n const pj1 = sj10 * 2;\n pj = pj1 % 11;\n }\n\n // 反模10计算\n if (pj === 1) {\n retNum = 0;\n } else {\n retNum = 11 - pj;\n }\n\n return retNum;\n}\n\n/**\n * 检测值是否为营业执照号,也叫工商注册号。由14位数字本体码和1位数字校验码组成,其中本体码从左至右依次为:6位首次登记机关码、8位顺序码。\n *\n * @static\n * @alias module:Validator.isBusinessLicense\n * @see 参考 {@link https://wenku.baidu.com/view/19873704cc1755270722087c.html|GS15—2006 工商行政管理市场主体注册号编制规则}\n * @since 3.5.0\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.checkCode=true] 是否校验最后一位校验码,如果为false,不校验校验位。\n * @returns {boolean} 值是否为营业执照号\n * @example\n *\n * isBusinessLicense('310115600985533'); // true\n * isBusinessLicense('310115600985535'); // false\n *\n * // 不校验验证码,长度和类型还是有校验\n * isBusinessLicense('310115600985535', { checkCode: false }); // true\n * isBusinessLicense('ac115600985535', { checkCode: false }); // false\n * isBusinessLicense('31011560098', { checkCode: false }); // false\n * \n */\nfunction isBusinessLicense(value, options = {}) {\n const valueStr = normalizeString(value);\n // @ts-ignore\n // TODO 下个版本废弃 loose\n const { loose = false, checkCode: cc = true } = options;\n const needCheckCode = !loose && cc;\n\n const passBaseRule = baseReg.test(valueStr);\n\n // 宽松模式 或 基础规则不通过直接返回\n if (!needCheckCode || !passBaseRule) {\n return passBaseRule;\n }\n\n // 前14位\n const preCode = valueStr.substring(0, 14);\n // 校验码\n const lastCode = valueStr.substring(valueStr.length - 1);\n // 计算校验码\n const checkCode = sumCheckCode(preCode);\n\n return lastCode === String(checkCode);\n}\n\nexport default isBusinessLicense;\n","/**\n * 检测值是否类似Promise对象\n *\n * @static\n * @alias module:Validator.isPromiseLike\n * @since 3.8.0\n * @param {*} obj 要检测的值\n * @returns {boolean} 是否类似Promise对象\n * @example\n *\n * isPromiseLike([]); // false\n * isPromiseLike({ then: () => { } }); // true\n * isPromiseLike(Promise.resolve()); // true\n * \n */\nfunction isPromiseLike(obj) {\n return obj !== null && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n}\n\nexport default isPromiseLike;\n","import normalizeString from './normalizeString';\n\n// 港澳居民来往内地通行证正则\nconst regHMCard = /^[hm]{1}([0-9]{10}|[0-9]{8})$/i;\n\n/**\n * 检测值是否为港澳居民来往内地通行证,俗称回乡证或回乡卡。\n *\n * @static\n * @alias module:Validator.isHMCard\n * @since 4.0.0\n * @see 参考 {@link https://zh.wikipedia.org/wiki/港澳居民来往内地通行证|港澳居民来往内地通行证}\n * @param {*} value 要检测的值\n * @returns {boolean} 是否为港澳居民来往内地通行证\n * @example\n * // 第一代 11 位\n * isHMCard('h3203117707'); // true\n * isHMCard('H3203117707'); // true\n * isHMCard('m3203117707'); // true\n * isHMCard('M3203117707'); // true\n *\n * // 第二代 9 位\n * isHMCard('h32031177'); // true\n * isHMCard('H32031177'); // true\n * isHMCard('m32031177'); // true\n * isHMCard('M32031177'); // true\n */\nfunction isHMCard(value) {\n const valueStr = normalizeString(value);\n return regHMCard.test(valueStr);\n}\n\nexport default isHMCard;\n","import normalizeString from './normalizeString';\n\n// 台湾居民来往大陆通行证正则\nconst regTWCard = /^\\d{8}$/i;\n\n// 一次性短期台胞证\nconst singleRegTWCard = /^[\\da-z]{10,12}$/i;\n\n/**\n * 检测值是否为台湾居民来往大陆通行证,俗称台胞证。\n *\n * @static\n * @alias module:Validator.isTWCard\n * @since 4.0.0\n * @see 参考 {@link https://zh.wikipedia.org/wiki/台湾居民来往大陆通行证|台湾居民来往大陆通行证}\n * @param {*} value 要检测的值\n * @param {Object} [options] 配置项\n * @param {boolean} [options.loose=false] 宽松模式。如果为true,表示支持一次性短期通行证\n * @returns {boolean} 是否为台湾居民来往大陆通行证\n * @example\n * \n * isTWCard('12345678'); // true\n * isTWCard('07257456'); // true\n *\n * // 一次性短期\n * isTWCard('F290299977'); // false\n * \n * // 宽松模式,支持一次性短期通行证\n * isTWCard('F290299977', { loose: true }); // true\n */\nfunction isTWCard(value, options = {}) {\n const { loose = false } = options;\n\n const valueStr = normalizeString(value);\n if (regTWCard.test(valueStr)) {\n return true;\n }\n return loose ? singleRegTWCard.test(valueStr) : false;\n}\n\nexport default isTWCard;\n","import normalizeString from './normalizeString';\n\nconst reg = /^[A-Z]{6}[A-Z\\d]{2}(?:[A-Z\\d]{3})?$/;\n\n/**\n * 检测值是否为 Swift Code。8位或11位,前6位为大写字母,7-8位为大写字母或数字,9-11位为可选的大写字母或数字。\n *\n * @static\n * @alias module:Validator.isSwiftCode\n * @see 参考 {@link https://zh.wikipedia.org/wiki/ISO_9362|ISO 9362}\n * @since 4.9.0\n * @param {*} value 要检测的值\n * @returns {boolean} 值是否为 Swift Code\n * @example\n *\n * isSwiftCode('DEUTDEFF'); // true\n * isSwiftCode('deutdeff'); // false\n *\n * isSwiftCode('BKTWTWTP010'); // true\n * isSwiftCode('010BKTWTWTP'); // false\n *\n * isSwiftCode('ICBKCNBJBJM'); // true\n *\n */\nfunction isSwiftCode(value) {\n const valueStr = normalizeString(value);\n return reg.test(valueStr);\n}\n\nexport default isSwiftCode;\n","// 最大安全数字\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n// 最小安全数字\nexport const MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\n","import isType from './isType';\n\n/**\n * 检查值是否为NaN\n *\n * @static\n * @alias module:Type.isNaN\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为NaN\n * @example\n *\n * isNaN(NaN)\n * // => true\n *\n * isNaN(1)\n * // => false\n */\nfunction _isNaN(value) {\n return isType(value, 'Number') && isNaN(value);\n}\n\nexport default _isNaN;\n","import isType from './isType';\n\n/**\n * 检查值是否为Number\n *\n * @static\n * @alias module:Type.isNumber\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为Number\n * @example\n *\n * isNumber(1)\n * // => true\n *\n * isNumber(Number.MIN_VALUE)\n * // => true\n *\n * isNumber(Infinity)\n * // => true\n *\n * isNumber(NaN)\n * // => true\n *\n * isNumber('1')\n * // => false\n */\nfunction isNumber(value) {\n return isType(value, 'Number');\n}\n\nexport default isNumber;\n","import isType from './isType';\n\n/**\n * 检查值是否为Symbol\n *\n * @static\n * @alias module:Type.isSymbol\n * @since 1.1.0\n * @param {*} value 检查值\n * @returns {boolean} 是否为Symbol\n * @example\n *\n * isSymbol(Symbol.iterator)\n * // => true\n *\n * isSymbol(\"abc\")\n * // => false\n */\nfunction isSymbol(value) {\n return isType(value, 'Symbol');\n}\n\nexport default isSymbol;\n","/**\n * 参考: https://github.com/nefe/number-precision/blob/master/src/index.ts\n *\n * 解决浮动运算问题,避免小数点后产生多位数和计算精度损失。\n * 问题示例:2.3 + 2.4 = 4.699999999999999,1.0 - 0.9 = 0.09999999999999998\n */\n\nimport { MAX_SAFE_INTEGER, MIN_SAFE_INTEGER } from './constants';\nimport devWarn from './devWarn';\nimport { isNumber, isString, isSymbol } from './type';\n\n/**\n * 将值转换为有效数值\n * \n * @param {*} value 要转换的值\n * @returns {number|string} 有效数值\n */\nexport function transformEffectiveNumber(value) {\n /** @type {string|number|undefined} */\n let ret;\n if (isString(value)) {\n ret = value.trim(); // ' 15' ' 15 ' 兼容 Number(string) 处理\n\n if (ret === '') {\n ret = Number(ret);\n } else if (Number.isNaN(Number(ret))) { // string如果可以转换为number,默认不转换为number类型\n ret = Number.NaN;\n }\n } else if (isSymbol(value)) {\n // 例如 Symbol 包装器对象将会报错\n // symObj = Object(Symbol());\n // Number(symObj); // TypeError: Cannot convert a Symbol value to a number\n ret = Number.NaN;\n } else if (!isNumber(value)) {\n // 其余非数字类型通过 Number 转换\n ret = Number(value);\n } else {\n ret = value;\n }\n\n if (Number.isNaN(ret)) {\n return Number.NaN;\n }\n\n // @ts-ignore\n return ret;\n}\n\n/**\n * 是否为科学计数法数字\n *\n * @param {string} num 检查值\n * @returns {boolean}\n */\nexport function isScientificNumber(num) {\n return /\\d+\\.?\\d*e[\\+\\-]*\\d+/i.test(num);\n}\n\n/**\n * 把错误的数据转正\n *\n * @param {number} num 输入数\n * @param {number} [precision=12] 小数点的精度\n * @returns {number}\n * @example\n *\n * strip(0.09999999999999998)=0.1\n */\nexport function strip(num, precision = 12) {\n return +parseFloat(num.toPrecision(precision));\n}\n\n/**\n * 计算数字的小数点长度,支持科学记数法\n *\n * @param {number|string} num 输入数\n * @returns {number} 小数点长度\n */\nexport function digitLength(num) {\n // Get digit length of e\n const eSplit = num.toString().split(/e/i);\n const len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0);\n return len > 0 ? len : 0;\n}\n\n/**\n * 把小数转成整数,支持科学计数法。如果是小数则放大成整数\n *\n * @param {number|string} num 输入数\n * @returns {number}\n */\nexport function float2Fixed(num) {\n const strNum = String(num);\n if (!isScientificNumber(strNum)) {\n return Number(strNum.replace('.', ''));\n }\n const dLen = digitLength(num);\n return dLen > 0 ? strip(+num * Math.pow(10, dLen)) : +num;\n}\n\n/**\n * 检测数字是否越界,如果越界给出提示\n * @param {number} num 输入数\n * @returns\n */\nexport function checkBoundary(num) {\n if (+num > MAX_SAFE_INTEGER || +num < MIN_SAFE_INTEGER) {\n devWarn(`${num} is beyond boundary when transfer to integer, the results may not be accurate`);\n }\n}\n\n/**\n * 去掉左边数字0\n *\n * @param {string} num 数字字符串\n * @returns {string}\n */\nexport function trimLeftZero(num) {\n const reg = /^([+-])?(0+)([0-9\\.]+)$/;\n const result = reg.exec(num);\n\n let sign;\n\n if (result) {\n sign = result[1] || '';\n return sign + (result[3][0] === '.' ? '0' + result[3] : result[3]);\n }\n\n return num;\n}\n\n/**\n * 科学计数法转换成普通数字\n *\n * JavaScript在以下情景会自动将数值转换为科学计数法:\n * 1.小数点前的数字个数大于等于22位\n * 2.小数点前边是0,小数点后十分位(包含十分位)之后连续零的个数大于等于6个\n *\n * @param {string | number} num 科学计数法数字\n * @returns {string | number} 转换后的数字字符串\n */\nexport function scientificToNumber(num) {\n const strNum = String(num);\n\n if (!isScientificNumber(strNum)) {\n return num;\n }\n\n /** @type string */\n let ret;\n\n const zero = '0';\n const parts = strNum.toLowerCase().split('e');\n const e = parts.pop(); // 存储指数\n // @ts-ignore\n const l = Math.abs(e); // 取绝对值,l-1就是0的个数\n // @ts-ignore\n const sign = e / l; //判断正负\n const coeff_array = parts[0].split('.'); // 将系数按照小数点拆分\n\n // 如果是小数\n if (sign === -1) {\n // 整数部分\n const intVal = trimLeftZero(coeff_array[0]);\n\n // 整数部分大于科学计数后面部分\n // 如: 10e-1, 10.2e-1\n if (intVal.length > l) {\n const thanLen = intVal.length - l;\n const dec = coeff_array[1] || '';\n\n ret = intVal.slice(0, thanLen);\n\n // 处理 10e-1, 100e-1\n if (intVal.slice(thanLen) !== '0' || dec) {\n ret += '.' + intVal.slice(thanLen) + dec;\n }\n } else {\n // 整数部分小于等于科学计数后面部分\n // 如: 1e-1, 0.2e-1, 1.2e-2, 1.2e-1\n ret = zero + '.' + new Array(l - intVal.length + 1).join(zero) + coeff_array.join('');\n }\n } else {\n // 小数部分\n const dec = coeff_array[1] || '';\n\n // 如果是整数,将整数除第一位之外的非零数字计入位数,相应的减少0的个数\n if (l - dec.length < 0) {\n ret = trimLeftZero(coeff_array[0] + dec.substring(0, l)) + '.' + dec.substring(l);\n } else {\n // 拼接字符串,如果是整数,不需要拼接小数点\n ret = coeff_array.join('') + new Array(l - dec.length + 1).join(zero);\n }\n }\n\n return trimLeftZero(ret);\n}\n\n","import { checkBoundary, scientificToNumber, isScientificNumber } from './utils/math.util';\nimport isNaN from './utils/type/isNaN';\nimport { trimLeftZero } from './utils/math.util';\nimport devWarn from './utils/devWarn';\n\nconst reg = /^[+-]?\\d*\\.?\\d*$/;\n\n/**\n * 检查数字或数字字符串\n *\n * @private\n * @param {string} num\n * @returns 是否为数字\n */\nfunction checkNumber(num) {\n if (!(reg.test(num) || isScientificNumber(num)) || isNaN(num) || (typeof num !== 'number' && typeof num !== 'string') || num === '') {\n devWarn(`${num} invalid parameter.`);\n\n return false;\n }\n\n // 数字超限如果不是是字符串,可能有异常\n // 如 1111111111111111111111 // => 1.1111111111111111e+21\n if (typeof num === 'number') {\n checkBoundary(num);\n }\n\n return true;\n}\n\n/**\n * 格式化整数部分\n *\n * @private\n * @param {string} intStr 数字字符串\n * @param {string} thousand 千分位符号\n * @returns 格式化后的值\n */\nfunction formatInt(intStr, thousand) {\n let txt = '';\n intStr = trimLeftZero(intStr);\n intStr = intStr[0] === '+' ? intStr.substring(1) : intStr; // 去掉+符号\n const negativeSymbol = Number(intStr) < 0 ? '-' : '';\n const reArr = negativeSymbol ? intStr.substring(1).split('').reverse() : intStr.split('').reverse();\n\n for (let i = 0; i < reArr.length; i++) {\n txt += reArr[i] + ((i + 1) % 3 === 0 && i + 1 !== reArr.length ? thousand : '');\n }\n\n return negativeSymbol + txt.split('').reverse().join('');\n}\n\n/**\n * 格式化小数部分,如果使用 toFixed,超大额数字会自动被截断\n *\n * @private\n * @param {string} decStr 小数点部分的字符串\n * @param {number} precision 保留位数\n * @param {string} decimal 小数点符号\n * @returns 格式化后的值\n */\nfunction formatDec(decStr, precision, decimal) {\n if (precision === 0) {\n return '';\n }\n\n const zero = 0;\n let ret = '';\n\n if (decStr && Number(decStr) > 0) {\n let tmpNum = parseFloat('0.' + decStr);\n ret = tmpNum.toFixed(precision).substring(2);\n } else {\n ret = zero.toFixed(precision).substring(2);\n }\n\n return decimal + ret;\n}\n\n/**\n * 格式化金额\n *\n * @static\n * @alias module:Processor.formatMoney\n * @since 1.1.0\n * @param {string | number} num 需转换金额 (最大:9007199254740991 最小: -9007199254740991)\n * @param {Object} [options] - 金额格式化配置\n * @param {string | number} [options.precision=2] - 保留位数 (最高:10位)\n * @param {string} [options.symbol] - 货币符号\n * @param {string} [options.thousand=\",\"] - 千分位符号\n * @param {string} [options.decimal=\".\"] - 小数位符号\n * @returns {string} 格式化的金额\n * @example\n *\n * // 整数\n * formatMoney('1000'); // 1,000.00\n *\n * // 小数(默认保留2位小数)\n * formatMoney('3000.03'); // 3,000.03\n *\n * // 保留4位小数\n * formatMoney('3000.0300', { precision: 4 }); // 3,000.0300\n *\n * // 保留10位小数\n * formatMoney('1500.2', { precision: 10 }); // 1,500.2000000000\n *\n * // 自定义单位符号\n * formatMoney(1000.00, { symbol: '$' }); // $1,000.00\n *\n * // 自定义千位分割符(默认',')\n * formatMoney(1000.00, { thousand: '|' }); // 1|000.00\n *\n * // 自定义小数位分割符(默认'.')\n * formatMoney(1000.00, { decimal: '&' }); // 1,000&00\n * \n */\nconst formatMoney = (num, options = {}) => {\n let { precision = 2, symbol, thousand = ',', decimal = '.' } = options;\n\n // 数字参数不正确,返回空字符串\n // @ts-ignore\n if (!checkNumber(num)) {\n return '';\n }\n\n // 参数规整化\n if (typeof precision !== 'number' || isNaN(precision) || precision < 0) {\n precision = 2;\n } else if (precision > 10) {\n precision = 10;\n }\n symbol = typeof symbol === 'string' ? symbol : '';\n thousand = typeof thousand === 'string' ? thousand : ',';\n decimal = typeof decimal === 'string' ? decimal : '.';\n\n // 转换数字字符串,支持科学记数法\n const strNum = scientificToNumber(num) + '';\n // 整数和小数部分\n const [intStr, decStr] = strNum.split('.');\n\n return symbol + formatInt(intStr, thousand) + formatDec(decStr, precision, decimal);\n};\n\nexport default formatMoney;\n","import normalizeString from './normalizeString';\n\n/**\n * 格式化银行卡号\n *\n * @static\n * @alias module:Processor.formatBankCard\n * @since 1.1.0\n * @param {string} bankCardNo 要处理的字符串\n * @param {Object} [options] 配置项\n * @param {string} [options.char=\" \"] 间隔字符\n * @param {number} [options.length=4] 间隔长度\n * @returns {string} 格式化的银行卡号\n * @example\n *\n * // 19位银行卡\n * formatBankCard('6228480402564890018'); // 6228 4804 0256 4890 018\n *\n * // 16位银行卡\n * formatBankCard('6228480402564890'); // 6228 4804 0256 4890\n *\n * // 脱敏银行卡\n * formatBankCard('6228********890'); // 6228 **** **** 890\n *\n * // 16位银行卡,\"-\"间隔\n * formatBankCard('6228480402564890', {char: '-'}); // 6228-4804-0256-4890\n *\n */\nfunction formatBankCard(bankCardNo = '', options = {}) {\n const { char = ' ', length = 4 } = options;\n\n const reg = new RegExp(`(.{${length}})`, 'g');\n const regChar = new RegExp(`${char}`, 'g');\n\n const realValue = normalizeString(bankCardNo).replace(regChar, '');\n const str = realValue.replace(reg, `$1${char}`);\n\n return realValue.length % length === 0 ? str.substring(0, str.length - 1) : str;\n}\n\nexport default formatBankCard;\n","import normalizeString from './normalizeString';\n\n/**\n * 替换字符,应用场景如:脱敏\n *\n * @static\n * @alias module:Processor.replaceChar\n * @since 1.1.0\n * @param {string} str 要处理的字符串\n * @param {Object} [options] 配置项\n * @param {number} [options.start=3] 开始位置\n * @param {number} [options.end=-4] 结束位置\n * @param {string} [options.char=\"*\"] 替换字符\n * @param {number} [options.repeat] 替换字符的重复次数,默认为替换内容长度,可设置为固定值\n * @param {string} [options.exclude] 排除字符,如果指定排除项,repeat设置无效\n * @returns {string} 处理后的字符\n * @example\n *\n * // 手机号\n * replaceChar('13000000000'); // 130****0000\n *\n * // 身份证\n * replaceChar('130701199310302288'); // 130***********2288\n *\n * // 邮箱\n * const email = '12345@qq.com'\n * replaceChar(email, {start: 2, end: email.indexOf('@'), repeat: 4}); // 12****@qq.com\n *\n * // 银行卡号\n * replaceChar('6228480402564890018', {start: 0, end: -4, repeat: 4}); // ****0018\n *\n * // 带格式的银行卡号,忽略空字符串\n * replaceChar('6228 4804 0256 4890 018', {start: 4, end: -4, exclude: ' '}); // 6228 **** **** **** 018\n *\n * // 用户名\n * replaceChar('林某某', {start: 1, end: Infinity, repeat: 2}); // 林**\n * replaceChar('林某', {start: 1, end: Infinity, repeat: 2}); // 林**\n * replaceChar('林某某某', {start: 1, end: Infinity, repeat: 2}); // 林**\n *\n */\nfunction replaceChar(str, options = {}) {\n const { char = '*', exclude } = options;\n let { start = 3, end = -4, repeat } = options;\n\n const realStr = normalizeString(str);\n const strLen = realStr.length;\n\n // 开始位置超过str长度\n if (Math.abs(start) >= strLen) {\n return realStr;\n }\n\n start = start >= 0 ? start : strLen + start;\n end = end >= 0 ? end : strLen + end;\n\n // 开始位置大于结束位置\n if (start >= end) {\n return realStr;\n }\n\n let middleStr = realStr.substring(start, end);\n\n if (exclude) {\n const reg = new RegExp(`[^${exclude}]`, 'g');\n middleStr = middleStr.replace(reg, char);\n } else {\n repeat = typeof repeat === 'number' && repeat >= 0 ? repeat : middleStr.length;\n middleStr = char.repeat(repeat);\n }\n\n return realStr.substring(0, start) + middleStr + realStr.substring(end);\n}\n\nexport default replaceChar;\n","import { checkBoundary } from './utils/math.util';\nimport devWarn from './utils/devWarn';\n\n// 简体\nconst chnNumberChar = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];\nconst chnUnitChar = ['', '十', '百', '千'];\n\n// 繁体\nconst big5NumberChar = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];\nconst big5UnitChar = ['', '拾', '佰', '仟'];\n\n// 数字字符、计数单位\n\n/**\n * @type {string[]}\n * @private\n */\nlet numberChar;\n\n/**\n * @type {string[]}\n * @private\n */\nlet unitChar;\n\n/**\n * @type {string[]}\n * @private\n */\nlet unitSection;\n\n/**\n * 每个小节的内部进行转化\n *\n * @private\n * @param {number} section 数字\n * @returns {string} 转化的数字\n */\nfunction sectionToChinese(section) {\n let str = '';\n let chnstr = '';\n let zero = false; //zero为是否进行补零, 第一次进行取余由于为个位数,默认不补零\n let unitPos = 0;\n\n while (section > 0) {\n // 对数字取余10,得到的数即为个位数\n let v = section % 10;\n\n //如果数字为零,则对字符串进行补零\n if (v == 0) {\n if (zero) {\n //如果遇到连续多次取余都是0,那么只需补一个零即可\n zero = false;\n chnstr = numberChar[v] + chnstr;\n }\n } else {\n //第一次取余之后,如果再次取余为零,则需要补零\n zero = true;\n str = numberChar[v];\n str += unitChar[unitPos];\n chnstr = str + chnstr;\n }\n unitPos++;\n section = Math.floor(section / 10);\n }\n return chnstr;\n}\n\n/**\n * 转换整数\n *\n * @private\n * @param {number} num 要转换的数字\n * @returns {string} 中文数字\n */\nfunction convertInteger(num) {\n let numInt = Math.floor(num);\n\n let unitPos = 0;\n let strIns = '';\n let chnStr = '';\n let needZero = false;\n\n if (numInt === 0) {\n return numberChar[0];\n }\n while (numInt > 0) {\n var section = numInt % 10000;\n if (needZero) {\n chnStr = numberChar[0] + chnStr;\n }\n strIns = sectionToChinese(section);\n strIns += section !== 0 ? unitSection[unitPos] : unitSection[0];\n chnStr = strIns + chnStr;\n needZero = section < 1000 && section > 0;\n numInt = Math.floor(numInt / 10000);\n unitPos++;\n }\n return chnStr;\n}\n\n/**\n * 转换小数\n *\n * @private\n * @param {number} num 要转换的数字\n */\nfunction convertDecimal(num) {\n const strNum = num + '';\n const index = strNum.indexOf('.');\n\n let ret = '';\n\n if (index > -1) {\n let decimalStr = strNum.slice(index + 1);\n ret = mapNumberChar(parseInt(decimalStr));\n }\n\n return ret;\n}\n\n/**\n * 映射为中文数字\n *\n * @private\n * @param {number} num 要处理的数字\n * @returns {string} 返回中文数字的映射\n */\nfunction mapNumberChar(num) {\n const strNum = num + '';\n let ret = '';\n\n for (let i = 0, len = strNum.length; i < len; i++) {\n ret += numberChar[parseInt(strNum[i])];\n }\n\n return ret;\n}\n\n/**\n * 数字转中文数字\n * 不在安全数字 -9007199254740991~9007199254740991 内,处理会有异常\n *\n * @static\n * @alias module:Processor.numberToChinese\n * @since 1.2.0\n * @param {number} num 数字\n * @param {Object} [options] 配置项\n * @param {boolean} [options.big5=false] 繁体\n * @param {boolean} [options.unit=true] 计数单位\n * @param {string} [options.decimal=\"点\"] 中文小数点,繁体字为點\n * @param {string} [options.zero=\"零\"] 设置0。常用配置 〇\n * @param {string} [options.negative=\"负\"] 负数前面的字\n * @param {Object} [options.unitConfig] 节点单位配置\n * @param {string} [options.unitConfig.w=\"万\"] 设置计数单位万。常用配置 萬\n * @param {string} [options.unitConfig.y=\"亿\"] 设置计数单位亿。常用配置 億\n * @returns {string} 中文数字\n * @example\n *\n * numberToChinese(100); // 一百\n * numberToChinese(100.3); // 一百点三\n * numberToChinese(1234567890); // 一十二亿三千四百五十六万七千八百九十\n * numberToChinese(1234567890.11); // 一十二亿三千四百五十六万七千八百九十点一一\n *\n * // 繁体\n * numberToChinese(100, {big5: true}); // 壹佰\n * numberToChinese(100.3, {big5: true}); // 壹佰點叁\n * numberToChinese(1234567890.11, {big5: true}); // 壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾點壹壹\n *\n * // 不带计数单位\n * numberToChinese(1990, {unit: false}); // 一九九零\n *\n * // 不带计数单位,修改0\n * numberToChinese(1990, {unit: false, zero:'〇'}); // 一九九〇\n *\n */\nfunction numberToChinese(num, options = {}) {\n const { big5 = false, unit = true, zero = '', negative = '负', unitConfig = {} } = options;\n let { decimal = '' } = options;\n\n // 非数字 或 NaN 不处理\n if (typeof num !== 'number' || isNaN(num)) {\n devWarn(`参数错误 ${num},请传入数字`);\n\n return '';\n }\n\n // 超过安全数字提示\n checkBoundary(num);\n\n // 设置数字字符和计数单位\n if (big5) {\n numberChar = big5NumberChar.slice();\n unitChar = big5UnitChar.slice();\n decimal = decimal || '點';\n } else {\n numberChar = chnNumberChar.slice();\n unitChar = chnUnitChar.slice();\n decimal = decimal || '点';\n }\n\n // 设置节点计数单位,万、亿、万亿\n const unitWan = unitConfig?.w || '万';\n const unitYi = unitConfig?.y || '亿';\n const unitWanYi = unitWan + unitYi;\n unitSection = ['', unitWan, unitYi, unitWanYi];\n\n // 设置0\n if (zero) {\n numberChar[0] = zero;\n }\n\n // 前置字符,负数处理\n const preStr = num < 0 ? negative : '';\n\n // 整数和小数\n let chnInteger, chnDecimal;\n const numAbs = Math.abs(num);\n\n // 处理整数\n if (unit) {\n chnInteger = convertInteger(numAbs);\n } else {\n chnInteger = mapNumberChar(Math.floor(numAbs));\n }\n\n // 处理小数\n chnDecimal = convertDecimal(numAbs);\n\n return chnDecimal ? `${preStr}${chnInteger}${decimal}${chnDecimal}` : `${preStr}${chnInteger}`;\n}\n\nexport default numberToChinese;\n","/**\n * 字节转换存储单位,保留2位小数点\n *\n * @static\n * @alias module:Processor.bytesToSize\n * @since 3.8.0\n * @param {number} bytes 字节大小\n * @returns {string} 存储单位值\n * @example\n *\n * bytesToSize(0); // 0 B\n * bytesToSize(1024); // 1 KB\n * bytesToSize(3.213243*1024*1024); // 3.21 MB\n * bytesToSize(1024*1024*1024); // 1 GB\n * \n */\nfunction bytesToSize(bytes) {\n const numBytes = typeof bytes !== 'number' ? Number(bytes) : bytes;\n if (numBytes === 0 || isNaN(numBytes)) return '0 B';\n\n const k = 1024;\n // 存储单位\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(numBytes) / Math.log(k));\n\n return sizes[i] ? `${Number((numBytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}` : numBytes + '';\n}\n\nexport default bytesToSize;\n","const regIdCard = /^(?<province>\\d{2})(?<city>\\d{2})(?<area>\\d{2})(?<year>(?:\\d{2})?\\d{2})(?<month>\\d{2})(?<day>\\d{2})\\d{2}(?<gender>\\d)(?:\\d|X)?$/i;\n\nconst Provinces = [\n // 华北地区:北京市|110000,天津市|120000,河北省|130000,山西省|140000,内蒙古自治区|150000\n ['11', '北京市'],\n ['12', '天津市'],\n ['13', '河北省'],\n ['14', '山西省'],\n ['15', '内蒙古自治区'],\n\n // 东北地区: 辽宁省|210000,吉林省|220000,黑龙江省|230000\n ['21', '辽宁省'],\n ['22', '吉林省'],\n ['23', '黑龙江省'],\n\n // 华东地区: 上海市|310000,江苏省|320000,浙江省|330000,安徽省|340000,福建省|350000,江西省|360000,山东省|370000\n ['31', '上海市'],\n ['32', '江苏省'],\n ['33', '浙江省'],\n ['34', '安徽省'],\n ['35', '福建省'],\n ['36', '江西省'],\n ['37', '山东省'],\n\n // 华中地区: 河南省|410000,湖北省|420000,湖南省|430000\n ['41', '河南省'],\n ['42', '湖北省'],\n ['43', '湖南省'],\n\n // 华南地区:广东省|440000,广西壮族自治区|450000,海南省|460000\n ['44', '广东省'],\n ['45', '广西壮族自治区'],\n ['46', '海南省'],\n\n // 西南地区:重庆市|500000,四川省|510000,贵州省|520000,云南省|530000,西藏自治区|540000\n ['50', '重庆市'],\n ['51', '四川省'],\n ['52', '贵州省'],\n ['53', '云南省'],\n ['54', '西藏自治区'],\n\n // 西北地区: 陕西省|610000,甘肃省|620000,青海省|630000,宁夏回族自治区|640000,新疆维吾尔自治区|650000\n ['61', '陕西省'],\n ['62', '甘肃省'],\n ['63', '青海省'],\n ['64', '宁夏回族自治区'],\n ['65', '新疆维吾尔自治区'],\n\n // 台湾地区:台湾省|710000\n // 台湾居民公民身份号码地址码为830000,参考 http://www.wanweibaike.com/wiki-中华人民共和国行政区划代码_(7区)、https://zh.wikipedia.org/wiki/港澳台居民居住证\n ['71', '台湾省'],\n ['83', '台湾省'],\n\n // 港澳地区:香港特别行政区|810000,澳门特别行政区|820000\n ['81', '香港特别行政区'],\n ['82', '澳门特别行政区']\n];\n\n// 第一位数字是以前的大区制代码。第二位是大区所在省市编码。全国共分为8个大区:华北(1)、东北(2)、华东(3)、中南(4)、西南(5)、西北(6)、台湾(7)和港澳(8)。\n// const Regions = [\n// ['1', '华北地区'],\n// ['2', '东北地区'],\n// ['3', '华东地区'],\n// ['4', '中南地区'],\n// ['5', '西南地区'],\n// ['6', '西北地区'],\n// ['7', '台湾地区'],\n// ['8', '港澳地区']\n// ];\n\n/**\n * @typedef {Object} IdCardOrigin - 解析身份证原数据\n * @property {string} province - 省份编码\n * @property {string} city - 城市编码\n * @property {string} area - 地区编码\n * @property {string} year - 出生年\n * @property {string} month - 出生月\n * @property {string} day - 出生日\n * @property {string} gender - 性别 能整除2为女,否则为男\n */\n\n/**\n * @typedef {Object} IdCardInfo - 身份证信息\n * @property {string} province - 省份\n * @property {string} birthday - 生日\n * @property {string} gender - 性别\n * @property {IdCardOrigin} origin - 解析身份证原数据\n */\n\n/**\n * 解析身份证号码,支持15、18位身份证号码\n *\n * @static\n * @alias module:Processor.parseIdCard\n * @since 4.0.0\n * @see 参考 {@link https://baike.baidu.com/item/居民身份证号码|居民身份证号码}\n * @param {string} id 身份证号码,支持15位\n * @returns {null|IdCardInfo} null 或 省份、生日、性别,省/市/区/年/月/日/性别编码\n * @example\n * \n * parseIdCard('123456789123456'); // null\n *\n * // 18位身份证号码\n * parseIdCard('130701199310302288'); \n * // =>\n * {\n * birthday: \"1993-10-30\",\n * gender: \"女\",\n * origin: { province: \"13\", city: \"07\", area: \"01\", year: \"1993\", month: \"10\", day: \"30\", gender: \"8\" },\n * province: \"河北省\"\n * }\n *\n * // 15位身份证号码\n * parseIdCard('130701931030228');\n * // =>\n * {\n * birthday: \"93-10-30\",\n * gender: \"女\",\n * origin: { province: \"13\", city: \"07\", area: \"01\", year: \"93\", month: \"10\", day: \"30\", gender: \"8\" },\n * province: \"河北省\"\n * }\n *\n */\nfunction parseIdCard(id) {\n if (!regIdCard.test(id)) {\n return null;\n }\n\n /** @type {RegExpExecArray} */\n // @ts-ignore\n const info = regIdCard.exec(id);\n\n /** @type {{ province: string, city: string, area: string, year: string, month: string, day: string, gender: string }} */\n // @ts-ignore\n const origin = info?.groups || {\n province: info[1],\n city: info[2],\n area: info[3],\n year: info[4],\n month: info[5],\n day: info[6],\n gender: info[7]\n };\n\n const province = Provinces.find((item) => item[0] === origin.province);\n\n if (!province) {\n return null;\n }\n\n const birthday = `${origin.year}-${origin.month}-${origin.day}`;\n const gender = Number(origin.gender) % 2 === 0 ? '女' : '男';\n // const region = Regions.find(item => item[0] === origin.province?.substring(0, 1));\n\n return {\n // region,\n province: province[1],\n birthday,\n gender,\n origin\n };\n}\n\nexport default parseIdCard;\n","// file、blob文件如何预览图片?\n// 方法1:将file或者blob类型文件转成base64数据,再作为src赋值给img标签\n// 方法2:使用 window.URL.createObjectURL(blob) 为blob、file 创建一个指向该参数对象的URL\n\n/**\n * 将 Blob 或 File 对象转成 data:URL 格式的 Base64 字符串。\n *\n * @static\n * @alias module:Processor.blobToDataURL\n * @see 参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader/readAsDataURL|FileReader.readAsDataURL()}\n * @since 4.1.0\n * @param {Blob} blob Blob 或 File 对象\n * @returns {Promise<string>} data:URL 格式的 Base64 字符串。\n * @example\n * const aFileParts = ['<a id=\"a\"><b id=\"b\">hey!</b></a>']; // 一个包含DOMString的数组\n * const htmlBlob = new Blob(aFileParts, { type: 'text/html' }); // 得到 blob\n *\n * blobToDataURL(htmlBlob).then(data=>{\n * console.log(data); // data:text/html;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * });\n *\n * const textBlob = new Blob(aFileParts, { type: 'text/plain' });\n *\n * blobToDataURL(textBlob).then(data=>{\n * console.log(data); // data:text/plain;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * });\n */\nfunction blobToDataURL(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n // @ts-ignore\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(error);\n });\n}\n\nexport default blobToDataURL;\n","/**\n * 将 DataURL 转为 Blob 对象\n *\n * @static\n * @alias module:Processor.dataURLToBlob\n * @see 参考 {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Base64|Base64}\n * @since 4.1.0\n * @param {string} dataurl data: 协议的URL\n * @returns {Blob} Blob 对象\n * @example\n * const dataurl = 'data:text/html;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=';\n * dataURLToBlob(dataurl); // Blob {size: 32, type: 'text/html'}\n */\nfunction dataURLToBlob(dataurl) {\n const arr = dataurl.split(',');\n // @ts-ignore\n const mime = arr[0].match(/:(.*?);/)[1];\n const bstr = atob(arr[1]);\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new Blob([u8arr], { type: mime });\n}\n\nexport default dataURLToBlob;\n","/**\n * 设置 DataURL 前缀、MIME 类型、base64 标识。<br/>\n * 如果你需要获取DataURL 的 MIME 类型和数据本身,推荐使用 <a href=\"https://www.npmjs.com/package/data-urls\">data-urls</a>。\n *\n * @static\n * @alias module:Processor.setDataURLPrefix\n * @see 参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/Data_URIs|Data URLs}\n * @see 参考 {@link https://mimesniff.spec.whatwg.org/#understanding-mime-types|MIME types}\n * @since 4.1.0\n * @param {string} data 数据本身\n * @param {string} [mimetype=\"image/png\"] MIME 类型\n * @param {boolean} [base64=true] 添加 base64 标识\n * @returns {string} DataURL 格式的字符串\n * @example\n * \n * const data = 'PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=';\n * setDataURLPrefix(data); // data:image/png;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * setDataURLPrefix(data, 'image/png', false); // data:image/png,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * setDataURLPrefix(data, 'image/jpg'); // data:image/jpg;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * setDataURLPrefix(data, 'text/html'); // data:text/html;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * setDataURLPrefix(data, ''); // data:;base64,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * setDataURLPrefix(data, '', false); // data:,PGEgaWQ9ImEiPjxiIGlkPSJiIj5oZXkhPC9iPjwvYT4=\n * \n */\nfunction setDataURLPrefix(data, mimetype = 'image/png', base64 = true) {\n return `data:${mimetype}${base64 ? ';base64' : ''},${data}`;\n}\n\nexport default setDataURLPrefix;\n","import isNil from './utils/type/isNil';\n\n// TODO: 函数重载,类型参照 Date\n\n/**\n * 创建一个 Date 实例日期对象,同 new Date() 。<br/>\n * 规避了苹果设备浏览器不支持部分格式(YYYY-MM-DD HH-mm 或 YYYY.MM.DD)。\n *\n * @static\n * @alias module:Processor.safeDate\n * @see 参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date|Date}\n * @since 4.4.0\n * @param {string|number|Date} [value] 日期时间字符串、毫秒数、日期对象\n * @param {...number} args 月/日/时/分/秒/毫秒\n * @returns {Date} Date 实例日期对象\n * @example\n * \n * safeDate('2022-1-1'); // Sat Jan 01 2022 00:00:00 GMT+0800 (中国标准时间)\n * safeDate('2022/1/1'); // Sat Jan 01 2022 00:00:00 GMT+0800 (中国标准时间)\n * safeDate('2022.1.1'); // Sat Jan 01 2022 00:00:00 GMT+0800 (中国标准时间)\n * safeDate('2022.1.1 11:11'); // Sat Jan 01 2022 11:11:00 GMT+0800 (中国标准时间)\n * safeDate(99, 1); // Mon Feb 01 1999 00:00:00 GMT+0800 (中国标准时间)\n * safeDate(1646711233171); // Tue Mar 08 2022 11:47:13 GMT+0800 (中国标准时间)\n * \n *\n */\nfunction safeDate(value, ...args) {\n const safeValue = typeof value === 'string' ? value.replace(/[\\\\.-]/g, '/') : value;\n\n if (args && args.length > 0) {\n // @ts-ignore\n return new Date(safeValue, ...args);\n }\n\n // @ts-ignore\n return isNil(safeValue) ? new Date() : new Date(safeValue);\n}\n\nexport default safeDate;\n","import normalizeString from './normalizeString';\n\n/**\n * 格式化手机号码\n *\n * @static\n * @alias module:Processor.formatMobile\n * @since 4.5.0\n * @param {string} mobileNo 手机号码\n * @param {object} [options] 配置项\n * @param {string} [options.char=' '] 间隔字符\n * @returns {string} 格式化后的手机号码\n * @example\n * \n * formatMobile('13345678900'); // 133 4567 8900\n * formatMobile('13345678900', { char: '-' }); // 133-4567-8900\n *\n * // 脱敏手机号码\n * formatMobile('133****1234'); // 133 **** 1234\n * formatMobile('133****1234', { char: '-' }); // 133-****-1234\n *\n * // 手机号码位数不够\n * formatMobile('133'); // 133\n * formatMobile('133456'); // 133 456\n * formatMobile('13345678'); // 133 4567 8\n * \n */\nfunction formatMobile(mobileNo, options = {}) {\n const { char = ' ' } = options;\n\n const regChar = new RegExp(char, 'g');\n const realValue = normalizeString(mobileNo).replace(regChar, '').substring(0, 11);\n\n if (realValue.length > 7) {\n return realValue.replace(/^(...)(....)/g, `$1${char}$2${char}`);\n }\n if (realValue.length > 3) {\n return realValue.replace(/^(...)/g, `$1${char}`);\n }\n return realValue;\n}\n\nexport default formatMobile;\n","import normalizeString from './normalizeString';\n\n/**\n * 前置补零\n *\n * @static\n * @alias module:Processor.padZero\n * @since 4.7.0\n * @param {string|number} value 要处理的值\n * @param {number} [size=2] 指定字符串长度\n * @returns {string} 用零填充数字到给定长度的字符串\n * @example\n * padZero(5); // 05\n * padZero('5'); // 05\n *\n * padZero(12); // 12\n * padZero('12'); // 12\n *\n * padZero(688); // 688\n * padZero('688'); // 688\n *\n * padZero(688, 5); // 00688\n * padZero('688', 5); // 00688\n * \n */\nfunction padZero(value, size = 2) {\n const str = normalizeString(value);\n const len = str.length;\n\n if (typeof size !== 'number' || size < 0) {\n size = 0;\n }\n\n if (len < size) {\n return '0'.repeat(size - len) + str;\n }\n return str;\n}\n\nexport default padZero;\n","import { digitLength, float2Fixed, checkBoundary, transformEffectiveNumber } from './utils/math.util';\n\n/**\n * 精确乘法,支持多个数相乘,乘数默认为 1 。\n *\n * @static\n * @alias module:Math.times\n * @since 3.1.0\n * @param {...number|string} nums 相乘的数\n * @returns {number} 乘积\n * @example\n *\n * times(3, 0.6); // 1.8\n * times(3, 0.6, 2); // 3.6\n * times(3, 0.6, 2, 10); // 36\n * \n */\nfunction times(...nums) {\n let [num1, num2 = 1, ...rest] = nums;\n if (rest.length > 0) {\n return times(times(num1, num2), ...rest);\n }\n\n num1 = transformEffectiveNumber(num1);\n num2 = transformEffectiveNumber(num2);\n\n // 兼容处理,如果参数包含无效数值时,返回 NaN\n // @ts-ignore\n if (isNaN(num1) || isNaN(num2)) {\n return Number.NaN;\n }\n\n const num1Changed = float2Fixed(num1);\n const num2Changed = float2Fixed(num2);\n const baseNum = digitLength(num1) + digitLength(num2);\n const leftValue = num1Changed * num2Changed;\n\n checkBoundary(leftValue);\n\n return leftValue / Math.pow(10, baseNum);\n}\n\nexport default times;\n","import { digitLength, transformEffectiveNumber } from './utils/math.util';\nimport times from './times';\n\n/**\n * 精确加法,支持多个数相加,加数默认为 0 。\n *\n * @static\n * @alias module:Math.plus\n * @since 3.1.0\n * @param {...number|string} nums 相加的数\n * @returns {number} 总和\n * @example\n *\n * plus(0.1, 0.2); // 0.3\n * plus(0.1, 0.2, 0.3); // 0.6\n * plus(0.1, 0.2, 0.3, 0.4); // 1\n * \n */\nfunction plus(...nums) {\n let [num1, num2 = 0, ...rest] = nums;\n\n if (rest.length > 0) {\n return plus(plus(num1, num2), ...rest);\n }\n\n num1 = transformEffectiveNumber(num1);\n num2 = transformEffectiveNumber(num2);\n\n // 兼容处理,如果参数包含无效数值时,返回 NaN\n // @ts-ignore\n if (isNaN(num1) || isNaN(num2)) {\n return Number.NaN;\n }\n\n const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));\n return (times(num1, baseNum) + times(num2, baseNum)) / baseNum;\n}\n\nexport default plus;\n","import { digitLength, transformEffectiveNumber } from './utils/math.util';\nimport times from './times';\n\n/**\n * 精确减法,支持多个数相减,减数默认为 0 。\n *\n * @static\n * @alias module:Math.minus\n * @since 3.1.0\n * @param {...number|string} nums 相减的数\n * @returns {number} 差\n * @example\n *\n * minus(1, 0.9); // 0.1\n * minus(1, 0.9, 0.02); // 0.08\n * minus(1, 0.9, 0.02, 0.08); // 0\n * \n */\nfunction minus(...nums) {\n let [num1, num2 = 0, ...rest] = nums;\n\n if (rest.length > 0) {\n return minus(minus(num1, num2), ...rest);\n }\n\n num1 = transformEffectiveNumber(num1);\n num2 = transformEffectiveNumber(num2);\n\n // 兼容处理,如果参数包含无效数值时,返回 NaN\n // @ts-ignore\n if (isNaN(num1) || isNaN(num2)) {\n return Number.NaN;\n }\n\n const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));\n return (times(num1, baseNum) - times(num2, baseNum)) / baseNum;\n}\n\nexport default minus;\n","import { strip, digitLength, float2Fixed, checkBoundary, transformEffectiveNumber } from './utils/math.util';\nimport times from './times';\n\n/**\n * 精确除法,支持多个数相除,除数默认为 1 。\n *\n * @static\n * @alias module:Math.divide\n * @since 3.1.0\n * @param {...number|string} nums 被除数和除数\n * @returns {number} 商数\n * @example\n *\n * divide(1.21); // 1.21 除数默认为 1 ,即 1.21/1 = 1.21\n * divide(1.21, 1.1); // 1.1\n * divide(1000, 10, 10); // 10\n * divide(1000, 10, 10, 10); // 1\n * \n * divide(); // NaN 如果没有传入参数,被除数默认为 undefined 。 Number(undefined) 转换为 NaN ,NaN/1 = NaN\n * divide(null); // 0 Number(null) 转换为 0 , 0/1 = 0\n * divide('1.5 ', 0.5); // 3 Number('1.5 ') 转换为 1.5 ,1.5/0.5 = 3\n * \n */\nfunction divide(...nums) {\n let [num1, num2 = 1, ...rest] = nums;\n\n if (rest.length > 0) {\n return divide(divide(num1, num2), ...rest);\n }\n\n num1 = transformEffectiveNumber(num1);\n num2 = transformEffectiveNumber(num2);\n\n // 兼容处理,如果参数包含无效数值时,返回 NaN\n // @ts-ignore\n if (isNaN(num1) || isNaN(num2)) {\n return Number.NaN;\n }\n\n const num1Changed = float2Fixed(num1);\n const num2Changed = float2Fixed(num2);\n checkBoundary(num1Changed);\n checkBoundary(num2Changed);\n // fix: 类似 10 ** -4 为 0.00009999999999999999,strip 修正\n return times(num1Changed / num2Changed, strip(Math.pow(10, digitLength(num2) - digitLength(num1))));\n}\n\nexport default divide;\n","import divide from './divide';\nimport times from './times';\nimport { transformEffectiveNumber } from './utils/math.util';\n\n/**\n * 四舍五入,支持设置精度\n *\n * @static\n * @alias module:Math.round\n * @since 3.1.0\n * @param {number|string} num 要四舍五入的数字\n * @param {number} [precision=0] 四舍五入的精度\n * @returns {number} 四舍五入的数字\n * @example\n *\n * round(4.006); // 4\n * round(4.006, 2); // 4.01\n * round(4060, -2); // 4100\n * \n */\nfunction round(num, precision = 0) {\n num = transformEffectiveNumber(num);\n\n // 兼容处理,如果参数包含无效数值时,返回 NaN\n // @ts-ignore\n if (isNaN(num)) {\n return Number.NaN;\n }\n\n const base = Math.pow(10, precision);\n return divide(Math.round(times(num, base)), base);\n}\n\nexport default round;\n","/**\n * 等待时间返回 Promise 。常用于异步方法中延时。\n *\n * @static\n * @alias module:Other.waitTime\n * @since 4.2.0\n * @param {number} [time=1000] 延时时间,单位毫秒\n * @returns {Promise<void>}\n * @example\n * \n * const test = async ()=>{\n * await waitTime();\n * // do something\n * }\n *\n * waitTime(500).then(()=>{\n * // do something\n * });\n * \n */\nfunction waitTime(time = 1000) {\n return new Promise((resolve) => {\n setTimeout(resolve, time);\n });\n}\n\nexport default waitTime;\n","import normalizeString from './normalizeString';\n\n// 参考了: https://github.com/ant-design/ant-design-mobile/blob/v2/components/input-item/index.tsx#L240\n\n/**\n * 计算输入框的值格式化后光标位置\n *\n * @static\n * @alias module:Other.calculateCursorPosition\n * @since 4.6.0\n * @see 格式化手机号码 {@link https://doly-dev.github.io/util-helpers/module-Processor.html#.formatMobile|formatMobile}\n * @see 格式化银行卡号 {@link https://doly-dev.github.io/util-helpers/module-Processor.html#.formatBankCard|formatBankCard}\n * @see h5示例 {@link https://2950v9.csb.app/|点击查看}\n * @see react示例 {@link https://33ccy9.csb.app/|点击查看}\n * @param {number} prevPos 赋值前的光标位置,onChange/onInput的光标位置 e.target.selectionEnd\n * @param {string} prevCtrlValue 上一个格式化后的值\n * @param {string} rawValue 当前输入原值\n * @param {string} ctrlValue 当前格式化后的值\n * @param {Object} [options] 配置项\n * @param {string[]|string} [options.placeholderChar=' '] 占位符\n * @param {RegExp} [options.maskReg=/\\D/g] 需要遮盖的字符规则。默认去掉非数字,意味着 ctrlValue 需要去掉非数字。\n * @param {'mobile'|'bankCard'} [options.type] 格式化类型,内置手机号码和银行卡号特殊处理\n * @returns {number} 格式化后的光标位置\n */\nfunction calculateCursorPosition(prevPos, prevCtrlValue, rawValue, ctrlValue, options = {}) {\n const { placeholderChar = ' ', maskReg = /\\D/g, type } = options;\n\n const realCtrlValue = normalizeString(prevCtrlValue);\n const realRawValue = normalizeString(rawValue);\n const placeholderChars = Array.isArray(placeholderChar) ? placeholderChar : [placeholderChar];\n\n const editLength = realRawValue.length - realCtrlValue.length;\n const isAddition = editLength > 0;\n\n let pos = prevPos;\n\n if (isAddition) {\n const additionStr = realRawValue.substring(pos - editLength, pos);\n let ctrlCharCount = additionStr.replace(maskReg, '').length;\n pos -= editLength - ctrlCharCount;\n\n let placeholderCharCount = 0;\n while (ctrlCharCount > 0) {\n if (placeholderChars.indexOf(ctrlValue.charAt(pos - ctrlCharCount + placeholderCharCount)) !== -1) {\n placeholderCharCount++;\n } else {\n ctrlCharCount--;\n }\n }\n pos += placeholderCharCount;\n }\n\n if ((type === 'mobile' && (pos === 4 || pos === 9)) || (type === 'bankCard' && pos > 0 && pos % 5 === 0)) {\n pos -= 1;\n }\n\n return pos;\n}\n\nexport default calculateCursorPosition;\n","const numberChars = '0123456789';\nconst letterChars = 'abcdefghijklmnopqrstuvwxyz';\nconst defaultChars = numberChars + letterChars + letterChars.toUpperCase();\n\n/**\n * @private\n * @param {number} [len=0] 长度\n * @param {string} [optionalChars] 允许的字符,默认为数字和大小写字母\n * @param {string} [prefix=''] 前缀部分,不计入长度\n * @returns {string}\n */\nfunction internalRandomString(len = 0, optionalChars = defaultChars, prefix = '') {\n while (len-- > 0) {\n const r = optionalChars[Math.floor(Math.random() * optionalChars.length)];\n return internalRandomString(len, optionalChars, prefix + r);\n }\n return prefix;\n}\n\n/**\n * 生成随机字符串\n *\n * @static\n * @alias module:Other.randomString\n * @since 4.8.0\n * @param {number} [len=0] 长度\n * @param {string} [optionalChars='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'] 允许的字符,默认为数字和大小写字母\n * @returns {string} 随机字符串\n * @example\n * \n * randomString(5); // slk23\n * randomString(8); // 71mHqo2A\n *\n * // 自定义允许的字符\n * randomString(5, 'abc'); // ccbcb\n * randomString(8, 'abcefg'); // bcgcfabg\n * \n */\nfunction randomString(len = 0, optionalChars) {\n let realLen = typeof len === 'number' ? len : Number(len);\n if (isNaN(realLen)) {\n realLen = 0;\n }\n\n const realChars = typeof optionalChars === 'string' && optionalChars ? optionalChars : defaultChars;\n\n return internalRandomString(len, realChars);\n}\n\nexport default randomString;\n","import normalizeString from './normalizeString';\n\n/**\n * 获取字符长度。中文汉字占2个字符,英文占1个字符,特殊如emoji占4个字符。\n *\n * @static\n * @alias module:Other.strlen\n * @since 4.10.0\n * @param {string} str 字符串\n * @returns {number} 字符长度\n * @example\n *\n * strlen('你好a'); // 5\n * strlen('你好,世界!'); // 12\n * strlen('严両丞丽'); // 8\n * strlen('abcde'); // 5\n * strlen('𠮷'); // 4\n * strlen('🍎'); // 4\n *\n */\nfunction strlen(str) {\n const realStr = normalizeString(str);\n let len = 0;\n for (let i = 0; i < realStr.length; i++) {\n const c = realStr.charCodeAt(i);\n if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {\n len++;\n } else {\n len += 2;\n }\n }\n return len;\n}\n\nexport default strlen;\n"],"names":["isUndefined","value","isNull","isNil","toString","Object","prototype","isType","typename","call","isString","convertToString","String","normalizeString","reg","isMobile","valueStr","test","isTelephone","isPostcode","regIdCard","check","id","index","sum","num","Math","pow","Number","toUpperCase","isIdCard","options","loose","checkCode","length","isEmail","isQQ","isWX","isVehicle","regLoose","sumCheckCode","numStr","numArr","replace","split","reverse","i","currNum","parseInt","mod","isBankCard","luhn","validateResult","precode","substring","baseReg","baseCodeArr","preCode","total","findIndex","item","wf","remainder","checkCodeIndex","isSocialCreditCode","cc","needCheckCode","passBaseRule","lastCode","config","disableWarning","setDisableWarning","bool","devWarn","console","warn","regNumber","regLowerCaseLetter","regUpperCaseLetter","regAllNumberAndLetter","hasNumber","val","hasLowerCaseLetter","hasUpperCaseLetter","hasHex","indexOf","hasSpecialCharacter","chars","specialChars","regChars","RegExp","ret","some","charItem","hasUnallowableCharacter","validatePassword","level","ignoreCase","special","valStr","currentLevel","containesNumber","containesLowerCaseLetter","containesUpperCaseLetter","containesSpecialCharacter","containesUnallowableCharacter","validated","containes","number","lowerCaseLetter","upperCaseLetter","specialCharacter","unallowableCharacter","isPassword","isPassport","chineseDictionary","chineseBasic","chineseExtend","chineseExtendA","chineseExtendB","chineseExtendC","chineseExtendD","chineseExtendE","chineseExtendF","looseChineseRegExp","chineseRegExp","chineseWithExtend","looseChineseExtendRegExp","chineseExtendRegExp","supportRegExpUnicode","hasOwnProperty","isChinese","useExtend","basicRegExp","extendRegExp","hasExtend","resultRegExp","flag","undefined","isIPv4","isIPv6","isUrl","retNum","pj","j","sj","sj10","pj1","isBusinessLicense","isPromiseLike","obj","then","regHMCard","isHMCard","regTWCard","singleRegTWCard","isTWCard","isSwiftCode","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","_isNaN","isNaN","isNumber","isSymbol","transformEffectiveNumber","trim","NaN","isScientificNumber","strip","precision","parseFloat","toPrecision","digitLength","eSplit","len","float2Fixed","strNum","dLen","checkBoundary","trimLeftZero","result","exec","sign","scientificToNumber","zero","parts","toLowerCase","e","pop","l","abs","coeff_array","intVal","thanLen","dec","slice","Array","join","checkNumber","formatInt","intStr","thousand","txt","negativeSymbol","reArr","formatDec","decStr","decimal","tmpNum","toFixed","formatMoney","symbol","formatBankCard","bankCardNo","char","regChar","realValue","str","replaceChar","exclude","start","end","repeat","realStr","strLen","middleStr","chnNumberChar","chnUnitChar","big5NumberChar","big5UnitChar","numberChar","unitChar","unitSection","sectionToChinese","section","chnstr","unitPos","v","floor","convertInteger","numInt","strIns","chnStr","needZero","convertDecimal","decimalStr","mapNumberChar","numberToChinese","big5","unit","negative","unitConfig","unitWan","w","unitYi","y","unitWanYi","preStr","chnInteger","chnDecimal","numAbs","bytesToSize","bytes","numBytes","k","sizes","log","Provinces","parseIdCard","info","origin","groups","province","city","area","year","month","day","gender","find","birthday","blobToDataURL","blob","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","onerror","error","dataURLToBlob","dataurl","arr","mime","match","bstr","atob","n","u8arr","Uint8Array","charCodeAt","Blob","type","setDataURLPrefix","data","mimetype","base64","safeDate","safeValue","args","Date","formatMobile","mobileNo","padZero","size","times","nums","num1","num2","rest","num1Changed","num2Changed","baseNum","leftValue","plus","max","minus","divide","round","base","waitTime","time","setTimeout","calculateCursorPosition","prevPos","prevCtrlValue","rawValue","ctrlValue","placeholderChar","maskReg","realCtrlValue","realRawValue","placeholderChars","isArray","editLength","isAddition","pos","additionStr","ctrlCharCount","placeholderCharCount","charAt","numberChars","letterChars","defaultChars","internalRandomString","optionalChars","prefix","r","random","randomString","realChars","strlen","c"],"mappings":";;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAASA,WAAT,CAAqBC,KAArB,EAA4B;EAC1B,SAAOA,KAAK,KAAK,KAAK,CAAtB;EACD;;ECrBD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAASC,MAAT,CAAgBD,KAAhB,EAAuB;EACrB,SAAOA,KAAK,KAAK,IAAjB;EACD;;ECfD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACA,SAASE,KAAT,CAAeF,KAAf,EAAsB;EACpB,SAAOD,WAAW,CAACC,KAAD,CAAX,IAAsBC,MAAM,CAACD,KAAD,CAAnC;EACD;;ECdD,IAAMG,QAAQ,GAAGC,MAAM,CAACC,SAAP,CAAiBF,QAAlC;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACA,SAASG,MAAT,CAAgBN,KAAhB,EAAuBO,QAAvB,EAAiC;EAC/B,SAAOJ,QAAQ,CAACK,IAAT,CAAcR,KAAd,wBAAoCO,QAApC,MAAP;EACD;;ECXD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACA,SAASE,QAAT,CAAkBT,KAAlB,EAAyB;EACvB,SAAOM,MAAM,CAACN,KAAD,EAAQ,QAAR,CAAb;EACD;;EClBD;EACA;EACA;EACA;EACA;EACA;;EACA,SAASU,eAAT,CAAyBV,KAAzB,EAAgC;EAC9B,SAAOS,QAAQ,CAACT,KAAD,CAAR,GAAkBA,KAAlB,GAA0BW,MAAM,CAACX,KAAD,CAAvC;EACD;;ECPD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACA,SAASY,eAAT,CAAyBZ,KAAzB,EAAgC;EAC9B,MAAIE,KAAK,CAACF,KAAD,CAAT,EAAkB;EAChB,WAAO,EAAP;EACD;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"}
|