SmartParks_visitore/uni_modules/lime-shared/isByteLength/index.ts
2025-08-21 11:23:54 +08:00

86 lines
2.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// @ts-nocheck
// import assertString from './util/assertString';
/**
* 字节长度验证配置选项
*/
export type IsByteLengthOptions = {
/** 允许的最小字节长度 */
min ?: number;
/** 允许的最大字节长度 */
max ?: number;
}
/**
* 检查字符串字节长度是否在指定范围内
* @function
* @overload 使用配置对象
* @param str - 要检查的字符串
* @param options - 配置选项对象
* @returns 是否满足字节长度要求
*
* @overload 使用独立参数
* @param str - 要检查的字符串
* @param min - 最小字节长度
* @param max - 最大字节长度(可选)
* @returns 是否满足字节长度要求
*
* @example
* // 使用配置对象
* isByteLength('🇨🇳', { min: 4, max: 8 }); // trueunicode 国旗符号占 8 字节)
*
* @example
* // 旧式参数调用
* isByteLength('hello', 3, 7); // true实际字节长度 5
*
* @description
* 1. 使用 URL 编码计算字节长度(更准确处理多字节字符)
* 2. 同时支持两种参数格式:
* - 配置对象格式 { min, max }
* - 独立参数格式 (min, max)
* 3. 不传 max 参数时只验证最小长度
* 4. 严格空值处理,允许设置 0 值
*/
export function isByteLength(str : string, optionsOrMin ?: IsByteLengthOptions) : boolean;
export function isByteLength(str : string, optionsOrMin ?: number) : boolean;
export function isByteLength(str : string, optionsOrMin : number, maxParam : number | null) : boolean;
export function isByteLength(
str : string,
optionsOrMin ?: IsByteLengthOptions | number,
maxParam : number | null = null
) : boolean {
// assertString(str);
/** 最终计算的最小长度 */
let min: number;
/** 最终计算的最大长度 */
let max : number | null;
// 参数逻辑处理
if (optionsOrMin != null && typeof optionsOrMin == 'object') {
// 使用对象配置的情况
const options = optionsOrMin as IsByteLengthOptions;
min = Math.max(options.min ?? 0, 0); // 确保最小值为正整数
max = options.max;
} else {
// 使用独立参数的情况
min = Math.max(
typeof optionsOrMin == 'number' ? optionsOrMin : 0,
0
);
max = maxParam;
}
// URL 编码后的字节长度计算
const encoded = encodeURI(str);
const len = (encoded?.split(/%..|./).length ?? 0) - 1;
// 执行验证逻辑
// #ifndef APP-ANDROID
return len >= min && (typeof max == 'undefined' || len <= (max ?? 0));
// #endif
// #ifdef APP-ANDROID
return len >= min && (max == null || len <= max);
// #endif
}