string_util.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. # -*- coding: utf-8 -*-
  2. from app.common.constant import CommonConstant
  3. class StringUtil:
  4. """
  5. 字符串工具类
  6. """
  7. @classmethod
  8. def is_blank(cls, string: str) -> bool:
  9. """
  10. 校验字符串是否为''或全空格
  11. 参数:
  12. - string (str): 需要校验的字符串。
  13. 返回:
  14. - bool: 校验结果。
  15. """
  16. if string is None:
  17. return False
  18. str_len = len(string)
  19. if str_len == 0:
  20. return True
  21. else:
  22. for i in range(str_len):
  23. if string[i] != ' ':
  24. return False
  25. return True
  26. @classmethod
  27. def is_empty(cls, string) -> bool:
  28. """
  29. 校验字符串是否为''或None
  30. 参数:
  31. - string (str | None): 需要校验的字符串。
  32. 返回:
  33. - bool: 校验结果。
  34. """
  35. return string is None or len(string) == 0
  36. @classmethod
  37. def is_not_empty(cls, string: str) -> bool:
  38. """
  39. 校验字符串是否不是''和None
  40. 参数:
  41. - string (str): 需要校验的字符串。
  42. 返回:
  43. - bool: 校验结果。
  44. """
  45. return not cls.is_empty(string)
  46. @classmethod
  47. def is_http(cls, link: str):
  48. """
  49. 判断是否为 http(s):// 开头
  50. 参数:
  51. - link (str): 链接。
  52. 返回:
  53. - bool: 是否为 http(s):// 开头。
  54. """
  55. return link.startswith(CommonConstant.HTTP) or link.startswith(CommonConstant.HTTPS)
  56. @classmethod
  57. def contains_ignore_case(cls, search_str: str, compare_str: str):
  58. """
  59. 查找指定字符串是否包含指定字符串同时忽略大小写
  60. 参数:
  61. - search_str (str): 查找的字符串。
  62. - compare_str (str): 比对的字符串。
  63. 返回:
  64. - bool: 查找结果。
  65. """
  66. if compare_str and search_str:
  67. return compare_str.lower() in search_str.lower()
  68. return False
  69. @classmethod
  70. def contains_any_ignore_case(cls, search_str: str, compare_str_list: list[str]):
  71. """
  72. 查找指定字符串是否包含列表中的任意一个字符串(忽略大小写)
  73. 参数:
  74. - search_str (str): 查找的字符串。
  75. - compare_str_list (list[str]): 比对的字符串列表。
  76. 返回:
  77. - bool: 查找结果。
  78. """
  79. if search_str and compare_str_list:
  80. return any([cls.contains_ignore_case(search_str, compare_str) for compare_str in compare_str_list])
  81. return False
  82. @classmethod
  83. def equals_ignore_case(cls, search_str: str, compare_str: str):
  84. """
  85. 比较两个字符串是否相等(忽略大小写)
  86. 参数:
  87. - search_str (str): 查找的字符串。
  88. - compare_str (str): 比对的字符串。
  89. 返回:
  90. - bool: 比较结果。
  91. """
  92. if search_str and compare_str:
  93. return search_str.lower() == compare_str.lower()
  94. return False
  95. @classmethod
  96. def equals_any_ignore_case(cls, search_str: str, compare_str_list: list[str]):
  97. """
  98. 判断指定字符串是否与列表中任意一个字符串相等(忽略大小写)
  99. 参数:
  100. - search_str (str): 查找的字符串。
  101. - compare_str_list (list[str]): 比对的字符串列表。
  102. 返回:
  103. - bool: 比较结果。
  104. """
  105. if search_str and compare_str_list:
  106. return any([cls.equals_ignore_case(search_str, compare_str) for compare_str in compare_str_list])
  107. return False
  108. @classmethod
  109. def startswith_case(cls, search_str: str, compare_str: str):
  110. """
  111. 查找指定字符串是否以指定字符串开头
  112. 参数:
  113. - search_str (str): 查找的字符串。
  114. - compare_str (str): 比对的字符串。
  115. 返回:
  116. - bool: 查找结果。
  117. """
  118. if compare_str and search_str:
  119. return search_str.startswith(compare_str)
  120. return False
  121. @classmethod
  122. def startswith_any_case(cls, search_str: str, compare_str_list: list[str]):
  123. """
  124. 查找指定字符串是否以列表中任意一个字符串开头
  125. 参数:
  126. - search_str (str): 查找的字符串。
  127. - compare_str_list (list[str]): 比对的字符串列表。
  128. 返回:
  129. - bool: 查找结果。
  130. """
  131. if search_str and compare_str_list:
  132. return any([cls.startswith_case(search_str, compare_str) for compare_str in compare_str_list])
  133. return False
  134. @classmethod
  135. def convert_to_camel_case(cls, name: str) -> str:
  136. """
  137. 将下划线大写方式命名的字符串转换为驼峰式;若输入为空则返回空字符串。
  138. 参数:
  139. - name (str): 下划线大写方式命名的字符串。
  140. 返回:
  141. - str: 转换后的驼峰式命名的字符串。
  142. """
  143. if not name:
  144. return ''
  145. if '_' not in name:
  146. return name[0].upper() + name[1:]
  147. parts = name.split('_')
  148. result = []
  149. for part in parts:
  150. if not part:
  151. continue
  152. result.append(part[0].upper() + part[1:].lower())
  153. return ''.join(result)
  154. @classmethod
  155. def get_mapping_value_by_key_ignore_case(cls, mapping: dict[str, str], key: str) -> str:
  156. """
  157. 根据忽略大小写的键获取字典中的对应的值
  158. 参数:
  159. - mapping (dict[str, str]): 字典。
  160. - key (str): 字典的键。
  161. 返回:
  162. - str: 字典键对应的值,未匹配则返回空字符串。
  163. """
  164. for k, v in mapping.items():
  165. if key.lower() == k.lower():
  166. return v
  167. return ''