- 此问题在此处已有答案**:
Python regex: pattern with re.ASCII can still match unicode characters?(1个答案)
3天前关闭。
此帖子已于3天前编辑并提交审核,未能重新打开帖子:
原始关闭原因未解决
我有一个正则表达式,控制密码,使它包含一个大写字母,一个小写字母,一个数字,一个特殊字符和最少8个字符。
正则表达式为:
regex_password = r"^(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).{8,}$"
我在这个函数中使用:
def password_validator(password):
#REGEX PASSWORD : minimum 8 characters, 1 lowercase, 1 uppercase, 1 special caracter
regex_password = r"^(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).{8,}$"
if not re.match(regex_password, password):
raise ValueError("""value is not a valid password""")
return password
然而,使用"²"会引起一个错误,然而,这个带有Javascript前端验证的正则表达式,或者在不同的正则表达式验证站点上,都可以工作。
问题可能是ascii,那么我怎么做才能让python接受regex中的ascii字符呢?
1条答案
按热度按时间mefy6pfw1#
来自文档:
第一个月
匹配非单词字符的任何字符。这与
\w
相反。如果使用ASCII
标志,则它等效于[^a-zA-Z0-9_]
。如果使用LOCALE
标志,则匹配既不是当前区域设置中的字母数字也不是下划线的字符。其他实现可以将
\w
解释为默认仅指ASCII字母数字字符和下划线,并且\W
通过扩展包含每个非ASCII字母数字字符以及非字母数字字符。可能的解决办法:
把它拼出来:
或者使用
re.ASCII
标志:这些更改中的任何一个都应该会给您带来所需的结果。