PHP Regex用于包含字母数字和特殊字符的字符串

时间:2016-10-19 01:11:18

标签: php regex preg-match

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

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

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用lookaheads验证您的条件:

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

让我们分解一下,因为它看起来很讨厌:

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

Demo on Regex101