Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式检查字符串中的唯一字符和禁止字符_Regex_Validation - Fatal编程技术网

Regex 正则表达式检查字符串中的唯一字符和禁止字符

Regex 正则表达式检查字符串中的唯一字符和禁止字符,regex,validation,Regex,Validation,我正在编写一个密码验证正则表达式,我已经成功地完成了80-90%的过程,但无法合并我需要的最后两个部分,我厌倦了把头撞在墙上,所以你们就来了;) 到目前为止,我的表达是: ^(?。*(.*)\1{3}.*(?=.{8,})(?=.*\d)(?=.[a-z])(?=.[a-z])(?=.[\Q~!@$%^&*()-?=+[]{}|:,./?\E])*$ 因此,我有以下规则: (?!.*()\1{3})-序列中相同字符的数量不超过3个 *(?=.{8,})-字符串必须至少包含8个字符 (?=.*

我正在编写一个密码验证正则表达式,我已经成功地完成了80-90%的过程,但无法合并我需要的最后两个部分,我厌倦了把头撞在墙上,所以你们就来了;)

到目前为止,我的表达是:

^(?。*(.*)\1{3}.*(?=.{8,})(?=.*\d)(?=.[a-z])(?=.[a-z])(?=.[\Q~!@$%^&*()-?=+[]{}|:,./?\E])*$
因此,我有以下规则:

  • (?!.*()\1{3})
    -序列中相同字符的数量不超过3个
  • *(?=.{8,})
    -字符串必须至少包含8个字符
  • (?=.*\d)
    -必须至少包含一位数字
  • (?=.[a-z])
    -必须至少包含一个小写字母
  • (?=.[A-Z])
    -必须至少包含一个大写字母
  • (?=.\*[\Q~!@$%^&*()-\=+[[]{}}:,./?\E])
    必须至少包含这些特殊字符中的一个
  • 我还需要增加两个限制

    1) 字符串中不能出现字母数字或我的特殊字符以外的字符。所以我想我的基本表达是正确的:

    ^([\w\Q~!@$%^&*()-[u=+[]{}}:,./?\E]*)$
    
    但是,当我试图把它加入到我的整体表达式中时,它不起作用,或者它破坏了我的另一个条件,所以我不确定我做错了什么

    2) 字符串必须包含4个唯一字符。我完全搞不懂这个

    提前感谢您提供的任何帮助

    试试这个。(我删除了两个不需要的
    *
    字符,并删除了至少8个字符,因为这可以合并到最后一个片段中。)

    ^
    (?!.*(.)\1{3})
    (?=.*\d)
    (?=.[a-z])
    (?=.[A-Z])
    (?=.[\Q~!@$%^&*()-?=+[]{}}:,./?\E])
    [\w\Q~!@$%^&*()-[u=+[]{}}}:,./?\E]{8,}
    $
    
    还有,你的最后一条规则:

    字符串必须包含4个唯一字符

    已经检查了,因为您正在请求一个数字、一个上限、一个下限和一个特殊=四个不同的类。

    试试这个。(我删除了两个不需要的
    *
    字符,并删除了至少8个字符,因为这可以合并到最后一个片段中。)

    ^
    (?!.*(.)\1{3})
    (?=.*\d)
    (?=.[a-z])
    (?=.[A-Z])
    (?=.[\Q~!@$%^&*()-?=+[]{}}:,./?\E])
    [\w\Q~!@$%^&*()-[u=+[]{}}}:,./?\E]{8,}
    $
    
    还有,你的最后一条规则:

    字符串必须包含4个唯一字符


    已经检查了,因为您正在请求一个数字、一个上限、一个下限和一个特殊=四个不同的类别。

    您应该对每个要求使用单独的检查。这个正则表达式是一个很难维护的怪物。你应该对每个需求使用单独的检查。regex是一个不易维护的怪物。这就是为什么这个社区如此伟大,它是你用第二双眼睛在新鲜的光线下观察你已经盯了几个小时的东西,你对最后一条规则绝对正确!下面是我使用的表达式:^(?。*()\1{3})。*(?=.{8,})(?=.*\d)(?=.[a-z])(?=.[a-z])(?=.[\Q~!@$%^&*(-)-.=+[]{}}:,./?\E]).[\w\Q~!+%^--[+++[]}不幸的是,你的正则表达式不起作用。它将验证
    '4mM-~asdfdasf
    4mM-~asdfdasf
    4mM-~asdfdasf
    作为有效密码。这是因为你的错误
    *
    四处游荡并捕获无效字符。这就是为什么这个社区如此伟大,它是你用第二双眼睛以全新的眼光看待你已经盯了几个小时的东西,你对最后一条规则绝对正确!下面是我使用的表达式:^(?。*()\1{3})。*(?=.{8,})(?=.*\d)(?=.[a-z])(?=.[a-z])(?=.[\Q~!@$%^&*(-)-.=+[]{}}:,./?\E]).[\w\Q~!+%^--[+++[]}不幸的是,你的正则表达式不起作用。它将验证
    '4mM-~asdfdasf
    4mM-~asdfdasf
    4mM-~asdfdasf
    作为有效密码。这是因为你的错误
    *
    四处游荡并捕获无效字符。
    ^
    (?!.*(.)\1{3})
    (?=.*\d)
    (?=.*[a-z])
    (?=.*[A-Z])
    (?=.*[\Q~!@#$%^&*()-_=+[]{}|;:,.<>/?\E])
    [\w\Q~!@#$%^&*()-_=+[]{}|;:,.<>/?\E]{8,}
    $