/** * 根据key升序生成 key1=val1&key2=val2的字符串 * @param {object} data 需要处理的对象 * @param {boolean} ignoreNull 是否过滤空值(空格或者null值不参与拼接) * @param splitChar 连接的字符, 默认是& * @param equalChar = */ export function generateKeyValStr(data: {}, ignoreNull = true, splitChar: string = '&', equalChar = '=') { const keys = Object.keys(data) keys.sort() let result = '' let i = 0 for (let key of keys) { if (ignoreNull && !data[key]) { return } if (i++ > 0) result += splitChar result += `${key}${equalChar}${data[key]}` } return result } /** * 将key1=val&key2=val的字符串组装成对象 * @param str key1=val&key2=val的字符串 * @param splitChar 连接的字符, 默认是& * @param equalChar = */ export function keyValToObject(str: string, splitChar: string = '&', equalChar = '='): {} { let result = {} if (!str) { return result } let arrs = str.split(splitChar) for (let sub of arrs) { let subArr = sub.split(equalChar) result[subArr[0]] = subArr[1] } return result } /** * 判断传入的值是否为true * @param {Object} obj 传入值为'true','TRUE',1,'1','on','ON','YES','yes'时,返回true,其他值均返回false * @return {boolean} */ export function isTrue(obj) { return ( obj === 'true' || obj === 'TRUE' || obj === 'True' || obj === 'on' || obj === 'ON' || obj === true || obj === 1 || obj === '1' || obj === 'YES' || obj === 'yes' ) } /** * 验证ObjectId格式是否正确 * @param {string} id * @return {boolean} */ export function isObjectId(id: string): boolean { //mongoose.Types.ObjectId.isValid(id) return /^[a-fA-F0-9]{24}$/.test(id) } /** * 10进制 -> 62进制 * @param {string | number} number * @return {string} */ export function string10to62(number: string | number) { const chars = '0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ'.split('') const radix = chars.length let qutient = +number const arr = [] do { const mod = qutient % radix qutient = (qutient - mod) / radix arr.unshift(chars[mod]) } while (qutient) return arr.join('') } /** * 62进制 -> 10 进制 * @param {string} numberCode * @return {number} */ export function string62to10(numberCode: string) { const chars = '0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ' const radix = chars.length numberCode = numberCode + '' const len = numberCode.length let i = 0 let originNumber = 0 while (i < len) { originNumber += Math.pow(radix, i++) * (chars.indexOf(numberCode.charAt(len - i)) || 0) } return originNumber } /** * 判断是否是json格式的字符串 * @param {string} str * @return {boolean} */ export function isJsonString(str: string) { try { if (typeof JSON.parse(str) == 'object') { return true } } catch (e) {} return false } export function checkAccountId(accountId: string) { return /^\d{4}_\d{4,6}_.+$/.test(accountId) } export function parseGameAccountId(accountId: string) { const arr = accountId.split('_') const gameId = arr[1] const channel = arr[0] const openId = arr[2] return { gameId, channel, openId } }