Newer
Older
smartwell_front / src / utils / String.ts
liyaguang 1 day ago 3 KB 设备安装点位编辑功能

import dayjs from "dayjs"
// 字符串操作方法

// 将 ALARM_CODE -> alarmCode
export function toHump(name: string) {
  const str = name.toLowerCase()
  return str.replace(/\_(\w)/g, (all, letter) => {
    return letter.toUpperCase()
  })
}
// js判断字母是否大写
export function isUpperCase(char: string) {
  return /^[A-Z]+$/.test(char)
}

// 将对象中所有属性转为驼峰
export function toHumpObject(data: any) {
  const result = {} as { [key: string]: string }
  for (const i in data) {
    if (isUpperCase(i[0])) {
      if (i.includes('_')) {
        result[toHump(i)] = data[i]
      }
      else {
        result[i.toLowerCase()] = data[i]
      }
    }
    else {
      result[i] = data[i]
    }
  }
  return result
}
// 颜色进制转化  十六进制转rgb
export function hexToRgb(hex: string) {
  // 去除可能包含在颜色值中的#号
  hex = hex.replace("#", "");

  // 通过正则匹配提取R、G、B的十六进制值
  var r = parseInt(hex.substring(0, 2), 16);
  var g = parseInt(hex.substring(2, 4), 16);
  var b = parseInt(hex.substring(4, 6), 16);

  // 返回RGB格式的颜色值
  // return "rgb(" + r + ", " + g + ", " + b + ")";
  return [r, g, b]
}

// ji在字符串特定位置插入换行符str 字符串  interval 指定位置 比如说5 就会在  5  10 15 20 添加
export function insertNewline(str, interval) {
  let result = '';
  for (let i = 0; i < str.length; i += interval) {
    result += str.slice(i, i + interval) + (i + interval < str.length ? '</br>' : '');
  }
  if (str.length < interval) {
    return str
  }
  return result;
}

// 验证时间是否正确 验证“YYYY-MM-DD”格式的日期
export function isValidDate(dateStr) {
  const regex = /^d{4}-(0[1-9]|1[0-2])-([0-2][0-9]|3[0-1])$/;
  if (!regex.test(dayjs(dateStr).format('YYYY-MM-DD'))) return false;
  const [year, month, day] = dayjs(dateStr).format('YYYY-MM-DD').split('-').map(Number);
  const date = new Date(year, month - 1, day);
  return date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day;
}

/**
 * 生成唯一随机字符串
 * @param length - 字符串长度,默认32位
 * @param prefix - 前缀字符串,可选
 * @returns 唯一随机字符串
 */
export function generateUniqueString(length: number = 32, prefix?: string): string {
  // 获取当前时间戳(毫秒级)
  const timestamp = Date.now().toString(36); // 转换为36进制缩短长度

  // 生成随机字符串
  let randomStr = '';
  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  const charsLength = chars.length;

  for (let i = 0; i < length; i++) {
    randomStr += chars.charAt(Math.floor(Math.random() * charsLength));
  }

  // 组合结果(时间戳+随机字符串)
  let result = `${timestamp}-${randomStr}`;

  // 如果指定了前缀,添加前缀
  if (prefix) {
    result = `${prefix}-${result}`;
  }

  // 截取到指定长度(如果超过)
  return result.substring(0, prefix ? prefix.length + length + timestamp.length + 2 : length + timestamp.length + 1);
}