gpt4 book ai didi

正则表达式:可选的特殊字符

转载 作者:行者123 更新时间:2023-12-04 23:18:32 24 4
gpt4 key购买 nike

我有一个正则表达式,它具有以下规则:

+ Must contain lower case letters
+ Must contain upper case letters
+ Must contain a number
+ Must contain a (defined)special character
+ At least 8 chars

这有效,我的正则表达式如下所示:
((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~@#\$%\^&\*_\-\+=`|{}:;!\.\?\"()\[\]]).{8,25})

现在我只想在一件事情上改变这个正则表达式:
特殊字符应该仍然是可能的(并且只有我允许的那些),但在字符串中的任何地方都应该是可选的(不再需要)。
所以新规则是
+ MAY contain (defined) special characters

我必须改变什么才能实现这一目标?

例子:
NicePassw0rd - NOT OK now, should be
NicePassw0rd%% - OK now (and still should be)
NicePassword - NOT OK now and shouldnt

你可以在那里测试我的正则表达式: https://regex101.com/r/qN5dN0/1

最佳答案

您必须添加 anchor ^$在模式的两端真正启用长度检查。如果你想禁止其他特殊字符,移动 ~@#$%^&*+=`|{}:;!.?\"()\[\]-到使用字母和数字的消费部分(请注意,如果您使用没有 [A-Za-z0-9_] 标志的 PCRE,则 \w/u 相同):

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\w~@#$%^&*+=`|{}:;!.?\"()\[\]-]{8,25}$

regex demo

这是它的作用:
  • ^ - 字符串开头
  • (?=.*\d) - 需要至少一位数字
  • (?=.*[a-z]) - 至少需要一个小写 ASCII 字母
  • (?=.*[A-Z]) - 需要至少 1 个 ASCII 大写字母
  • [\w~@#$%^&*+=`|{}:;!.?\"()\[\]-]{8,25} - 仅匹配(=消费)8 到 25 个字母数字符号或 _ ,或字符类中的所有字符
  • $ - 字符串结尾

  • 更有效的是基于 contrast principle 的正则表达式在前瞻中,当我们检查 0 个或更多字符时,除了需要检查存在性和所需符号的字符之外。查看包含 (?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]) 的更正正则表达式:
    ^(?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])[\w~@#$%^&*+=`|{}:;!.?\"()\[\]-]{8,25}$

    关于正则表达式:可选的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33890681/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com