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

时间:2011-08-18 17:13:33

标签: regex validation

我正在写一个密码验证正则表达式,我已经设法获得80-90%的方式,但不能合并我需要的最后两个部分,我厌倦了把头撞到墙上所以那是你们进来的地方;)

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

^(?!.*(.)\1{3}).*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\Q~!@#$%^&*()-_=+[]{}|;:,.<>/?\E]).*$

所以按顺序我有以下规则:

  1. (?!.*(.)\1{3}) - 序列中相同字符不超过3个
  2. .*(?=.{8,}) - 字符串必须至少包含8个字符
  3. (?=.*\d) - 必须至少包含一位数字
  4. (?=.*[a-z]) - 必须至少包含一个小写字母
  5. (?=.*[A-Z]) - 必须至少包含一个大写字母
  6. (?=.\*[\Q~!@#$%^&*()-_=+[]{}|;:,.<>/?\E]) - 必须至少包含其中一个特殊字符
  7. 我需要再添加两个限制

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

    ^([\w\Q~!@#$%^&*()-_=+[]{}|;:,.<>/?\E]*)$
    

    但是当我尝试将它添加到我的整体表达式中时它不起作用或它搞砸了我的其他条件之一,所以我不确定我做错了什么

    2)字符串必须包含4个唯一字符。我根本无法想象这一点。

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

1 个答案:

答案 0 :(得分:1)

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

^
(?!.*(.)\1{3})
(?=.*\d)
(?=.*[a-z])
(?=.*[A-Z])
(?=.*[\Q~!@#$%^&*()-_=+[]{}|;:,.<>/?\E])
[\w\Q~!@#$%^&*()-_=+[]{}|;:,.<>/?\E]{8,}
$

另外,你的最后一条规则:

  

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

已经检查过了,因为你要求一个数字,一个上部,一个下部,一个特殊=四个不同的类。