我疯狂地使用正则表达式。这是我想要完成的:我想要一个8个字符的密码,允许大写和小写字母,数字和!@#$%^& * -_字符。以下是我看似不起作用的内容:
preg_match('([A-za-z0-9-_!@#$%^&*]{8,})', $password)
我错过了一些非常明显的东西吗?
更新:是的,我错过了一些非常明显的东西 - 开放式括号[。但是,当我使用单引号或括号等字符时,它仍然返回true。 (这是我要避免的。)
答案 0 :(得分:3)
基本上你错过了一个开场[
字符组括号:
↓
preg_match('([A-za-z0-9-_!@#$%^&*()]{8,})', $password)
你还应该使用delimiters。 parens将表现如此,但最好使用另一对来避免捕获组的歧义:
preg_match('/^([A-za-z0-9-_!@#$%^&*()]{8,})$/', $password)
这也会添加start ^
和end $
断言以匹配整个字符串。
答案 1 :(得分:0)
这可能更容易打破个别规则。即一个规则来检查密码是否至少8个字符长,另一个检查是否为大写,另一个是小写,等等。
此外,看起来你在正则表达式方面有一些特殊字符而没有任何转义。例如,除了某些特殊情况之外,*字符在正则表达式中具有特殊含义。它需要转发\*
或括号[*]