| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- /**
- * 字符串扩展工具类(UniApp/微信小程序兼容版)
- * 由于微信小程序环境限制,不直接修改String原型,而是提供工具函数
- */
- // 匹配所有字符(包括中文、标点、符号、数字、字母等)
- const ALL_CHARS_REGEX = /([\u4e00-\u9fa5\uFF00-\uFFEF\w\s.,!?;:'"\-+*/=@#$%^&])/g;
- /**
- * 安全截断字符串
- * @param str 原始字符串
- * @param start 开始位置
- * @param length 截取长度
- * @param suffix 后缀,默认为'...'
- * @returns 截断后的字符串
- */
- export function safeTruncate(str: string, start: number, length: number, suffix: string = '...'): string {
- if (length <= 0) return '';
- const chars = Array.from(str.match(ALL_CHARS_REGEX) || []);
- if (chars.length <= length) {
- return chars.join('');
- }
- return chars.slice(start, start + length).join('') + suffix;
- }
- /**
- * 计算字符串的显示长度(考虑多字节字符)
- * @param str 原始字符串
- * @returns 显示长度
- */
- export function displayLength(str: string): number {
- const chars = Array.from(str.match(ALL_CHARS_REGEX) || []);
- return chars.length;
- }
- /**
- * 增强版空值检查
- * @param val 要检查的值
- * @returns 是否为空
- */
- export const isEmpty = (val: any): boolean => {
- // 处理 null 和 undefined
- if (val === null || val === undefined) return true;
-
- // 处理基本类型
- switch (typeof val) {
- case 'string':
- return val.trim() === '';
- case 'number':
- case 'bigint':
- return val === 0;
- case 'boolean':
- return val === false;
- }
-
- // 处理数组
- if (Array.isArray(val)) return val.length === 0;
-
- // 处理日期对象
- if (val instanceof Date) return false;
-
- // 处理普通对象
- if (typeof val === 'object') {
- // 处理 Map 和 Set
- if (val instanceof Map || val instanceof Set) return val.size === 0;
- return Object.keys(val).length === 0;
- }
-
- return false;
- };
- /**
- * 字符串扩展工具集合
- */
- export const StringExtensions = {
- safeTruncate,
- displayLength,
- isEmpty
- };
- // 可选:如果需要全局使用,可以在应用启动时注入到uni对象中
- export function installStringExtensions() {
- // @ts-ignore
- if (!uni.$string) {
- // @ts-ignore
- uni.$string = StringExtensions;
- }
- }
|