132 lines
3.2 KiB
TypeScript
132 lines
3.2 KiB
TypeScript
/**
|
|
* 根据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 }
|
|
}
|