使用正则表达式验证密码

时间:2016-12-09 07:48:48

标签: regex

我正在尝试使用以下规则验证密码:

  • 必须至少有八个字符。
  • 必须仅包含字母和数字。
  • 必须至少包含两位数字。

到目前为止,我写了这段代码:

[0-9a-zA-Z] (?=(.*\d){2}) {8,}

我不确定为什么我输入的密码会返回无效,尽管它遵循规则。

1 个答案:

答案 0 :(得分:1)

请记住,空格在正则表达式模式中是有意义的,因此最后需要至少8个空格。正则表达式中没有锚点,因此即使您编写正确的模式,长度限制也可能不起作用。到目前为止,这将匹配一个字母数字,一个空格,后面跟着2个出现的任何0+字符后跟一个数字,但由于有{8,}量词的空格,这个模式永远不会匹配任何东西。

你需要

^(?=.{8})[a-zA-Z]*(?:\d[a-zA-Z]*){2}[a-zA-Z0-9]*$

请参阅regex demo

  • ^ - 字符串开头
  • (?=.{8}) - 至少8个字符
  • [a-zA-Z]* - 零个或多个字母
  • (?:\d[a-zA-Z]*){2} - 2个序列:
    • \d - 一个数字(可以替换为[0-9]
    • [a-zA-Z]* - 零个或多个字母
  • [a-zA-Z0-9]* - 0+字母数字字符
  • $ - 字符串结束。

或者,您可以使用

^(?=(?:[a-zA-Z]*\d){2})[a-zA-Z0-9]{8,}$

请参阅another regex demo

在这里,(?=(?:[a-zA-Z]*\d){2})将需要至少2次出现0+个字母,后跟字符串中的数字,[a-zA-Z0-9]{8,}将匹配8个或更多字母数字字符。