PHP正则表达式用于包含字母数字和特殊字符的字符串

Vaj*_*tha 2 php regex preg-match

我尝试过但找不到这个问题的答案,所以我问这个问题。

我需要创建一个用于密码验证的正则表达式,它必须具有以下条件。

  • 至少一个字母
  • 至少一个数字
  • 至少一封特别的信~!^ ( ) { } < > % @ # & * + = _ -
  • 不得包含 $ ` , 。/ \ ; : ' " |
  • 必须介于 8-40 个字符之间
  • 没有空间

我创建了以下正则表达式,但它无法正常工作。

preg_match('/[A-Za-z\d$!^(){}?\[\]<>~%@#&*+=_-]{8,40}$/', $newpassword)
Run Code Online (Sandbox Code Playgroud)

有人可以帮我正确修复这个正则表达式吗?

谢谢。

Seb*_*icz 5

在这里,使用前瞻来验证您的条件:

^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!^(){}<>%@#&*+=_-])[^\s$`,.\/\\;:'"|]{8,40}$
Run Code Online (Sandbox Code Playgroud)

让我们把它分解一下,因为它看起来有点恶心:

  • 断言^它位于字符串的开头。
  • 第一个前瞻(?=.*[a-zA-Z])验证它是否至少包含一个字母(大写字母或小写字母)。
  • 第二个 ,(?=.*\d)验证它是否至少包含一位数字。
  • 第三个,(?=.*[~!^(){}<>%@#&*+=_-]),验证它是否至少包含特殊字符列表中的一个字符。
  • 最后,[^\s$,.\/\\;:'"|]{8,40}$使用倒排字符类验证整个字符串的长度是否在 8 到 40 个字符之间,并且不包含空格或非法字符。

Regex101 演示