Preg_match用于所有特殊字符,密码检查

时间:2011-11-08 16:32:56

标签: php preg-match special-characters

好的,我正在为我们的密码策略编写密码检查器,这需要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字符?

任何人都可以自由使用它,因为我认为不止一些人一直在寻找这个。

3 个答案:

答案 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] => $
)