繁体   English   中英

正则表达式和preg_match()

[英]Regular Expressions and preg_match()

我是正常表达的疯狂绿色。 这是我要完成的工作:我需要一个8个字符的密码,该密码允许使用大写和小写字母,数字和!@#$%^&* -_字符。 以下是我看似不起作用的内容:

preg_match('([A-za-z0-9-_!@#$%^&*]{8,})', $password)

我错过了一些非常明显的东西吗

更新:是的,我确实缺少一些明显的东西-右括号[。 但是,当我使用单引号或方括号之类的字符时,它仍然返回true。 (这是我要避免的。)

基本上,您会错过开头[这里的字符组括号:

              ↓
 preg_match('([A-za-z0-9-_!@#$%^&*()]{8,})', $password)

你还应该使用分隔符 paren的行为将是这样,但是最好使用不同的对,以免与捕获组产生歧义:

 preg_match('/^([A-za-z0-9-_!@#$%^&*()]{8,})$/', $password)

这也添加了start ^和end $ assertions以匹配整个字符串。

这可能更容易打破个别规则。 例如,检查密码是否至少8个字符,另一个检查是否为大写,另一个是否为小写,等等。

另外,看起来您在正则表达式方面有一些特殊字符,没有任何转义。 例如,除了某些特殊情况之外,*字符在正则表达式中具有特殊含义。 它需要转义\\*或放在括号[*]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM