import re from typing import Callable, Optional def validate_password_strength( password: str, phone: Optional[str] = None, real_name: Optional[str] = None, old_password_check: Optional[Callable[[str], bool]] = None, ) -> list: """ 校验密码强度,返回错误信息列表。列表为空表示通过。 old_password_check: 传入 password 返回 True 表示与旧密码相同。 """ errors = [] if len(password) < 8 or len(password) > 32: errors.append('密码长度必须在 8-32 位之间') if not re.search(r'[a-zA-Z]', password): errors.append('密码必须包含字母') if not re.search(r'\d', password): errors.append('密码必须包含数字') if phone and password == phone: errors.append('密码不能与手机号相同') if real_name and password == real_name: errors.append('密码不能与真实姓名相同') if old_password_check is not None and old_password_check(password): errors.append('新密码不能与旧密码相同') return errors