我在PHP中编写了一个密码正则表达式,对于任何至少包含一个字符的字符串,它应返回false:
到目前为止,我有这个:
<?php
$password = 'azAZ0 giggles 9*":,.!() .?";';
$regex1 = '#^[a-zA-Z0-9" *":,.!().?";\']+$#i';
if (preg_match($regex1, $password)) {
echo "A match was found.";
} else {
echo "A match was not found.";
}
?>
这看起来是否符合我的意图,或者您是否看到任何明显的错误?
我应该在正则表达式中添加什么,以便它应该为任何至少一个字符的字符串返回false:
答案 0 :(得分:4)
你的正则表达式非常接近目标,但并不完全正确。
我会用这个:
$regex1 = '/^[a-z0-9 :,.!().?";\'-]+$/i';
兴趣点:
A-Z
部分,因为正则表达式包含不区分大小写的修饰符*
(在此上下文中表示“空格或星号”) - 如果您还想允许选项卡和换行符作为密码的一部分(不太可能),请将其替换为\s
答案 1 :(得分:2)
您只需使用'
转义\
即可。试试这个
$regex1 = '#^[a-zA-Z0-9" *":,.!-().?";\']+$#i';
你似乎已经在正则表达式中有-
。
答案 2 :(得分:1)
在字符类(正则表达式中用方括号表示)中,减号-
始终引入范围:[A-Z]
。
你有!-(
,这是没有意义的范围,因此没有按你的想法行事。解决方案:
-
移至字符类的开头或结尾:[-A-Z...]
/ [A-Z...-]
-
:[A-Z\-...]
你问的另一个问题是“如何在PHP字符串中引用单引号?”并且与regex无关。但当然,“逃避它”就是答案。