【问题标题】:Regex shorthand for matching special characters匹配特殊字符的正则表达式简写
【发布时间】:2021-12-31 01:21:48
【问题描述】:

我正在为 Web 应用程序的后端构建一个密码验证器,我正在使用非常标准的大写、小写、数字、最小长度和特殊字符要求,并且我正在寻求重构一下正则表达式,所以它更紧凑。有没有一种方法可以搜索任何特殊字符的匹配项,而无需为每个特殊字符编写很长的正则表达式?

r'^(?=.*[\d])(?=.*[A-Z])(?=.*[a-z])(?=.*[special chars regex])[\w\d special chars regex]{8,255}$'

到目前为止,我的尝试一直围绕着使用像 \S 这样的否定集来匹配它们的想法,但由于它们也匹配数字,所以它仍然允许没有特殊字符的密码。

编辑: 我对特殊字符的意思可以概括为,我想捕获 ASCII 索引在 33 到 126 之间的字符,不包括字母和数字(数字索引 48 ~ 57,大写字母索引 65 ~ 90,小写字母索引 97 ~ 122字母)因为这些确实是预先存在的正则表达式短手的一部分,例如\w和\d。

这是一个ASCII chart 供参考。

【问题讨论】:

  • 您能定义特殊字符的含义吗?
  • 很好,我现在将编辑问题以更好地定义它

标签: python regex


【解决方案1】:

[^\w\s\d] 将匹配不是单词字符(小写或大写)、数字或空白字符的单个字符。

这意味着理论上你会使用[\w\d[^\w\d\s]] 来指示密码可以包含的所有字符,但由于该联合似乎不想正确解析,你可以明确指定 Unicode 范围(尽管十六进制,不是十进制):

(?=.*[\d])(?=.*[A-Z])(?=.*[a-z])(?=.*[^\w\d\s])[\u0021-\u007E]{8,255}

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多