tsghost/src/utils/string.util.ts
2021-08-06 15:01:09 +08:00

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 }
}