带有正则表达式的安全密码

Tar*_*our 5 php regex passwords character

我是正常表达的新手,我做了一个研究,并得到一点了解我需要的是一个符合这些规格的密码

  1. 任何字母字符(至少一个)
  2. 任何数字字符(至少一个)
  3. 空间不足
  4. 特殊字符(0或更多)

我得到的是这个

^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)(?!\S)$
Run Code Online (Sandbox Code Playgroud)

它匹配1,2,3规格而不是4我在4上尝试了不同的东西,但我失败了

谁能帮我 ?

Mar*_*der 6

你很近.这似乎解决了你的问题:

preg_match("/^(?=.*[0-9])(?=.*[a-z])(\S+)$/i", $password)
Run Code Online (Sandbox Code Playgroud)

我做了两处改动.

  1. 使用i修饰符稍微缩短(匹配不区分大小写).这允许删除AZ`.
  2. (?!\S)并不能真正帮助在这里,我想.相反,您可以简单地使您的实际匹配仅包含非空格字符(\S+).这也将立即允许您的密码中的特殊字符(实际上是空格的任何内容).

如果您只想允许某组特殊字符,请将\S包含字母,数字和您想要允许的所有字符的字符类替换为.顺便说一下,如果你想确保你的密码有一定的最小长度,你可以将其+改为{8,}例如.