好的,我正在为我们的密码策略编写密码检查器,这需要4个主要分类中的3个。我遇到问题的地方是特殊字符匹配。
这是我到目前为止所拥有的:
private function PasswordRequirements($ComplexityCount) {
$Count = 0;
if(preg_match("/\d/", $this->PostedData['password']) > 0) {
$Count++;
}
if(preg_match("/[A-Z]/", $this->PostedData['password']) > 0) {
$Count++;
}
if(preg_match("/[a-z]/", $this->PostedData['password']) > 0) {
$Count++;
}
// This is where I need help
if(preg_match("/[~`!@#$%^&*()_-+=\[\]{}\|\\:;\"\'<,>.]/", $this->PostedData['password']) > 0) {
$Count++;
}
if($Count >= $ComplexityCount) {
return true;
} else {
return false;
}
}
所以基本上我正在做的是检查每个案例的字符串,数字,大写,小写和特殊字符。我们对任何特殊字符没有任何限制,我还需要unicode字符。 \ W在这种情况下工作还是会再包含数字?我找不到关于\ W的精彩文档,所以我不清楚这部分。
有没有人知道一个简单的正则表达式,它将涵盖所有特殊字符和不包含数字和字母的unicode字符?
任何人都可以自由使用它,因为我认为不止一些人一直在寻找这个。
答案 0 :(得分:13)
此模式允许所有不是数字或a-Z的字符。
[^\da-zA-Z]
关于\W
,它是否定的\w
,与[A-Za-z0-9_]
相同。因此,\W
将是所有不是英文字母,数字或下划线的字符。
正如我在学习正则表达式时提到的评论this is a great resource。这是test the regex的好网站。
答案 1 :(得分:7)
如果你想匹配特殊字符
preg_match('/[\'\/~`\!@#\$%\^&\*\(\)_\-\+=\{\}\[\]\|;:"\<\>,\.\?\\\]/', $input)
答案 2 :(得分:2)
您可以将POSIX字符类[[:punct:]]
用于“特殊”字符:
<?php
$regex = '[[:punct:]]';
if (preg_match('/'.$regex.'/', 'somepas$', $matches)) {
print_r($matches);
}
?>
给出:
Array
(
[0] => $
)