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

Jef*_*rdt 3 php special-characters preg-match

好的,我正在为我们的密码策略编写密码检查器,这需要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;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以基本上我正在做的是检查每个案例的字符串,数字,大写,小写和特殊字符.我们对任何特殊字符没有任何限制,我还需要unicode字符.\ W在这种情况下工作还是会再包含数字?我找不到关于\ W的精彩文档,所以我不清楚这一部分.

有没有人知道一个简单的正则表达式,涵盖所有特殊字符和不包含数字和字母的unicode字符?

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

Mar*_*cus 13

此模式允许所有不是数字或aZ的字符.

[^\da-zA-Z]
Run Code Online (Sandbox Code Playgroud)

关于\W它是否定的\w,与之相同[A-Za-z0-9_].因此,\W所有字符都不是英文字母,数字或下划线.

正如我提到的那样,这是学习正则表达式的一个很好的资源.这是一个测试正则表达式的好网站.


pmm*_*pmm 7

如果你想匹配特殊字符

preg_match('/[\'\/~`\!@#\$%\^&\*\(\)_\-\+=\{\}\[\]\|;:"\<\>,\.\?\\\]/', $input)
Run Code Online (Sandbox Code Playgroud)