如何用python re(regex)接受ASCII字符[duplicate]

vhmi4jdf  于 2022-12-24  发布在  Python
关注(0)|答案(1)|浏览(111)
    • 此问题在此处已有答案**:

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字符呢?

mefy6pfw

mefy6pfw1#

来自文档:
第一个月
匹配非单词字符的任何字符。这与\w相反。如果使用ASCII标志,则它等效于[^a-zA-Z0-9_]。如果使用LOCALE标志,则匹配既不是当前区域设置中的字母数字也不是下划线的字符。
其他实现可以将\w解释为默认仅指ASCII字母数字字符和下划线,并且\W通过扩展包含每个非ASCII字母数字字符以及非字母数字字符。
可能的解决办法:
把它拼出来:

regex_password = r"^(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9_]).{8,}$"

或者使用re.ASCII标志:

if not re.match(regex_password, password, flags=re.ASCII):

这些更改中的任何一个都应该会给您带来所需的结果。

相关问题