密码正则表达式中的问题

时间:2017-03-16 20:33:41

标签: javascript regex

大家好我在javascript test()方法中制作一个密码正则表达式,它将采取以下输入

溶液

/^(?=.*\d)^(?=.*[!#$%'*+\-/=?^_{}|~])(?=.*[A-Z])(?=.*[a-z])\S{8,15}$/gm
  1. 可能包含空格以外的任何字母

  2. 至少8个字符,但不超过15个字符

  3. 至少取一个大写和一个小写字母

  4. 至少选择一个数字和一个特殊字符

  5. 但是我无法使用(句点,点,fullStop)执行以下任务

      

    (点,句号,句号),前提是它不是第一个或最后一个字符,并且它也不连续出现两次或多次。

    任何人都可以帮我解决这个问题,提前谢谢

1 个答案:

答案 0 :(得分:1)

您可以将带有\S{8,15}锚点的$部分移动到正向前瞻,并将其作为第一个条件(如果有空格则将整个字符串失败,或者长度小于8或大于15)并用[^.]+(?:\.[^.]+)*消耗子模式替换该模式。

/^(?=\S{8,15}$)(?=.*\d)(?=.*[!#$%'*+\/=?^_{}|~-])(?=.*[A-Z])(?=.*[a-z])[^.]+(?:\.[^.]+)*$/

请参阅regex demo

<强>详情:

  • ^ - 字符串开头
  • (?=\S{8,15}$) - 第一个要求字符串没有空格且长度为8到15个字符的条件
  • (?=.*\d) - 任何0+字符后必须有一个数字
  • (?=.*[!#$%'*+\/=?^_{}|~-]) - 在任何0+字符
  • 之后,定义的集合中必须有一个符号
  • (?=.*[A-Z]) - 需要大写的ASCII字母
  • (?=.*[a-z]) - 需要小写ASCII字母
  • [^.]+(?:\.[^.]+)* - 除.以外的1个字符,后跟0个或多个.序列,后跟1个或多个字符而不是点( note 我们不必将\s添加到这两个否定的字符类中,因为第一个预测已经预先验证了整个字符串及其长度)
  • $ - 字符串结束。