python写一个函数,来检测字符串username是否合规:
1.字符串仅可以是中文,英文字母(大小写均可),数字组成;
2.必须是中文或者字母开头,不能是数字开头;
3.长度是大于等于4,小于等于20;
4.针对于长度,需要区分中文和英文/数字,一个中文相当于长度2,一个字母或数字相当于长度1
import re
def is_valid_username(s):
# 检查开头
if s[0].isdigit():
return False
# 计算有效长度
length = sum(2 if '\u4e00' <= char <= '\u9fff' else 1 for char in s)
if not (4 <= length <= 20):
return False
# 检查字符类型
if not re.match(r'^[\u4e00-\u9fa5A-Za-z0-9]+$', s):
return False
return True
# 测试示例
print(is_valid_username("张三123")) # True
print(is_valid_username("123abc")) # False
print(is_valid_username("abc")) # False
print(is_valid_username("小李")) # True