Files
gym-manage/test-suite/utils/string_helper.py
T

174 lines
3.9 KiB
Python

"""
字符串处理工具类
提供字符串相关的工具方法
作者: 张翔
日期: 2026-04-01
"""
import random
import string
import re
from typing import Optional
class StringHelper:
"""字符串处理工具类"""
@staticmethod
def truncate(text: str, max_length: int = 100, suffix: str = "...") -> str:
"""
截断字符串
Args:
text: 原始字符串
max_length: 最大长度
suffix: 后缀
Returns:
截断后的字符串
"""
if not text:
return ""
if len(text) <= max_length:
return text
return text[:max_length] + suffix
@staticmethod
def mask_phone(phone: str) -> str:
"""
手机号脱敏
Args:
phone: 手机号
Returns:
脱敏后的手机号
"""
if not phone or len(phone) < 7:
return phone
return phone[:3] + "****" + phone[-4:]
@staticmethod
def mask_email(email: str) -> str:
"""
邮箱脱敏
Args:
email: 邮箱
Returns:
脱敏后的邮箱
"""
if not email or "@" not in email:
return email
parts = email.split("@")
username = parts[0]
domain = parts[1]
if len(username) <= 2:
masked_username = username[0] + "***"
else:
masked_username = username[:2] + "***"
return f"{masked_username}@{domain}"
@staticmethod
def mask_id_card(id_card: str) -> str:
"""
身份证号脱敏
Args:
id_card: 身份证号
Returns:
脱敏后的身份证号
"""
if not id_card or len(id_card) < 8:
return id_card
return id_card[:4] + "**********" + id_card[-4:]
@staticmethod
def random_string(length: int = 16, chars: str = None) -> str:
"""
生成随机字符串
Args:
length: 长度
chars: 字符集,默认为字母数字
Returns:
随机字符串
"""
if chars is None:
chars = string.ascii_letters + string.digits
return ''.join(random.choice(chars) for _ in range(length))
@staticmethod
def camel_to_snake(name: str) -> str:
"""
驼峰命名转下划线命名
Args:
name: 驼峰命名字符串
Returns:
下划线命名字符串
"""
if not name:
return ""
s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()
@staticmethod
def snake_to_camel(name: str) -> str:
"""
下划线命名转驼峰命名
Args:
name: 下划线命名字符串
Returns:
驼峰命名字符串
"""
if not name:
return ""
components = name.split('_')
return components[0] + ''.join(x.title() for x in components[1:])
@staticmethod
def is_empty(text: Optional[str]) -> bool:
"""
判断字符串是否为空
Args:
text: 字符串
Returns:
是否为空
"""
return text is None or text.strip() == ""
@staticmethod
def default_if_empty(text: Optional[str], default: str) -> str:
"""
如果字符串为空则返回默认值
Args:
text: 字符串
default: 默认值
Returns:
字符串或默认值
"""
return text if not StringHelper.is_empty(text) else default