UNPKG

@cloudcome/utils-core

Version:
1 lines 6.9 kB
{"version":3,"file":"regexp.cjs","sources":["../src/regexp.ts"],"sourcesContent":["const specialRE = /[.*+?^=!:${}()|[\\]/\\\\-]/g;\n\n/**\n * 编码处理正则表达式\n * @example\n * ```js\n * reEscape('/$')\n * // => '\\\\/\\\\$'\n * ```\n * @param {string} string\n * @returns {string}\n */\nexport function regexpEscape(string: string): string {\n return string.replace(specialRE, '\\\\$&');\n}\n\n// 邮箱\nconst EMAIL_RE = /^\\w+[-+.\\w]*@([a-z\\d-]+\\.)+[a-z]{2,5}$/i;\n/**\n * 判断字符串是否为邮箱格式,不对邮箱真实性做验证,如域名是否正确等\n * @param {string} value\n * @returns {boolean}\n */\nexport function isEmail(value: string): boolean {\n return EMAIL_RE.test(value);\n}\n\n// 手机号码\nconst PHONE_RE = /^1\\d{10}$/;\n/**\n * 判断字符串是否为宽松手机格式,即首位为 1 的 11 位数字都属于手机号\n * @param {string} value\n * @returns {boolean}\n */\nexport function isPhone(value: string): boolean {\n return PHONE_RE.test(value);\n}\n\n// 身份证号码\n// http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/\n// [\"北京市\", \"天津市\", \"河北省\", \"山西省\", \"内蒙古自治区\",\n// \"辽宁省\", \"吉林省\", \"黑龙江省\",\n// \"上海市\", \"江苏省\", \"浙江省\", \"安徽省\", \"福建省\", \"江西省\", \"山东省\",\n// \"河南省\", \"湖北省\", \"湖南省\", \"广东省\", \"广西壮族自治区\", \"海南省\",\n// \"重庆市\", \"四川省\", \"贵州省\", \"云南省\", \"西藏自治区\",\n// \"陕西省\", \"甘肃省\", \"青海省\",\"宁夏回族自治区\", \"新疆维吾尔自治区\",\n// \"台湾省\",\n// \"香港特别行政区\", \"澳门特别行政区\"]\n// [\"11\", \"12\", \"13\", \"14\", \"15\",\n// \"21\", \"22\", \"23\",\n// \"31\", \"32\", \"33\", \"34\", \"35\", \"36\", \"37\",\n// \"41\", \"42\", \"43\", \"44\", \"45\", \"46\",\n// \"50\", \"51\", \"52\", \"53\", \"54\",\n// \"61\", \"62\", \"63\", \"64\", \"65\",\n// \"71\",\n// \"81\", \"82\"]\n// 91 国外\nconst IDNO_RE =\n /^(1[1-5]|2[1-3]|3[1-7]|4[1-6]|5[0-4]|6[1-5]|7[1]|8[1-2]|9[1])\\d{4}(18|19|20)\\d{2}[01]\\d[0123]\\d{4}[\\dxX]$/;\n/**\n * 判断字符串是否为身份证号码格式\n * @param {string} value\n * @returns {boolean}\n */\nexport function isIDNo(value: string): boolean {\n const isSameFormat = IDNO_RE.test(value);\n\n if (!isSameFormat) return false;\n\n const year = Number(value.slice(6, 10));\n const month = Number(value.slice(10, 12));\n const date = Number(value.slice(12, 14));\n const d = new Date(year, month - 1, date);\n const isSameDate = d.getFullYear() === year && d.getMonth() + 1 === month && d.getDate() === date;\n\n if (!isSameDate) return false;\n\n // 将身份证号码前面的17位数分别乘以不同的系数;\n // 从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2\n // 将这17位数字和系数相乘的结果相加;\n // 用加出来和除以11,看余数是多少;\n // 余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字;\n // 其分别对应的最后一位身份证的号码为1-0-X-9-8-7-6-5-4-3-2\n // 通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。\n const coefficientList = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n const residueList = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\n let sum = 0;\n\n for (let start = 0; start < 17; start++) {\n sum += Number(value.slice(start, start + 1)) * coefficientList[start];\n }\n\n return residueList[sum % 11] === value.slice(-1);\n}\n\n// url\nconst URL_RE =\n /^https?:\\/\\/(([a-z\\d-]+\\.)+[a-z]{2,5}|(\\d{1,3}\\.){3}\\d{1,3})(:[1-9]\\d{0,4})?(\\/|\\/[\\w#!:.?+=&%@'/()-]+)?$/i;\n/**\n * 判断字符串是否为 url 格式,仅支持 http 协议,支持域名或者 ipV4\n * @param {string} value\n * @returns {boolean}\n */\nexport function isURL(value: string): boolean {\n return URL_RE.test(value);\n}\n\n// ipv4\nconst IPV4_RE = /^(?:(?:\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(?:\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])$/;\n/**\n * 判断字符串是否为 IPV4 格式,不对 ip 真实性做验证\n * @param {string} value\n * @returns {boolean}\n */\nexport function isIPV4(value: string): boolean {\n return IPV4_RE.test(value);\n}\n\nconst INTEGER_RE = /^(-?[1-9]\\d*|0)$/;\n/**\n * 判断字符串是否为整数(自然数),即 ...,-3,-2,-1,0,1,2,3,...\n * @param {string} value\n * @returns {boolean}\n */\nexport function isInteger(value: string): boolean {\n return INTEGER_RE.test(value);\n}\n\nconst FLOAT_RE = /^-?([1-9]\\d*|0)\\.\\d+$/;\n/**\n * 判断字符串是否为浮点数,即必须有小数点的有理数\n * @param {string} value\n * @returns {boolean}\n */\nexport function isFloat(value: string): boolean {\n return FLOAT_RE.test(value);\n}\n\n/**\n * 判断字符串是否为正确数值,包括整数和浮点数\n * @param {string} value\n * @returns {boolean}\n */\nexport function isNumerical(value: string): boolean {\n return isInteger(value) || isFloat(value);\n}\n\nconst DIGIT_RE = /^\\d+$/;\n/**\n * 判断字符串是否为数字,例如六位数字短信验证码(093031)\n * @param {string} value\n * @returns {boolean}\n */\nexport function isDigit(value: string): boolean {\n return DIGIT_RE.test(value);\n}\n"],"names":[],"mappings":";;AAAA,MAAM,YAAY;AAYX,SAAS,aAAa,QAAwB;AAC5C,SAAA,OAAO,QAAQ,WAAW,MAAM;AACzC;AAGA,MAAM,WAAW;AAMV,SAAS,QAAQ,OAAwB;AACvC,SAAA,SAAS,KAAK,KAAK;AAC5B;AAGA,MAAM,WAAW;AAMV,SAAS,QAAQ,OAAwB;AACvC,SAAA,SAAS,KAAK,KAAK;AAC5B;AAqBA,MAAM,UACJ;AAMK,SAAS,OAAO,OAAwB;AACvC,QAAA,eAAe,QAAQ,KAAK,KAAK;AAEnC,MAAA,CAAC,aAAqB,QAAA;AAE1B,QAAM,OAAO,OAAO,MAAM,MAAM,GAAG,EAAE,CAAC;AACtC,QAAM,QAAQ,OAAO,MAAM,MAAM,IAAI,EAAE,CAAC;AACxC,QAAM,OAAO,OAAO,MAAM,MAAM,IAAI,EAAE,CAAC;AACvC,QAAM,IAAI,IAAI,KAAK,MAAM,QAAQ,GAAG,IAAI;AACxC,QAAM,aAAa,EAAE,YAAY,MAAM,QAAQ,EAAE,SAAS,IAAI,MAAM,SAAS,EAAE,QAAc,MAAA;AAEzF,MAAA,CAAC,WAAmB,QAAA;AASxB,QAAM,kBAAkB,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;AAC5E,QAAM,cAAc,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAC1E,MAAI,MAAM;AAEV,WAAS,QAAQ,GAAG,QAAQ,IAAI,SAAS;AAChC,WAAA,OAAO,MAAM,MAAM,OAAO,QAAQ,CAAC,CAAC,IAAI,gBAAgB,KAAK;AAAA,EAAA;AAGtE,SAAO,YAAY,MAAM,EAAE,MAAM,MAAM,MAAM,EAAE;AACjD;AAGA,MAAM,SACJ;AAMK,SAAS,MAAM,OAAwB;AACrC,SAAA,OAAO,KAAK,KAAK;AAC1B;AAGA,MAAM,UAAU;AAMT,SAAS,OAAO,OAAwB;AACtC,SAAA,QAAQ,KAAK,KAAK;AAC3B;AAEA,MAAM,aAAa;AAMZ,SAAS,UAAU,OAAwB;AACzC,SAAA,WAAW,KAAK,KAAK;AAC9B;AAEA,MAAM,WAAW;AAMV,SAAS,QAAQ,OAAwB;AACvC,SAAA,SAAS,KAAK,KAAK;AAC5B;AAOO,SAAS,YAAY,OAAwB;AAClD,SAAO,UAAU,KAAK,KAAK,QAAQ,KAAK;AAC1C;AAEA,MAAM,WAAW;AAMV,SAAS,QAAQ,OAAwB;AACvC,SAAA,SAAS,KAAK,KAAK;AAC5B;;;;;;;;;;;"}