2011-11-08 43 views
3

好吧,我正在为我们的密码策略编写一个密码检查器,它需要4个主要分类中的3个。我遇到问题的地方是特殊字符匹配。Preg_match所有特殊字符,密码检查

这里是我迄今:

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("/[~`[email protected]#$%^&*()_-+=\[\]{}\|\\:;\"\'<,>.]/", $this->PostedData['password']) > 0) { 
     $Count++; 
    } 

    if($Count >= $ComplexityCount) { 
     return true; 
    } else { 
     return false; 
    } 
} 

所以基本上我在做什么是检查每个字母,数字,大写字母,小写字母和特殊字符的字符串。我们对任何特殊字符没有任何限制,我也需要unicode字符。 \ W在这种情况下工作还是会再次包含数字?我在\ W上找不到很棒的文档,所以我不清楚这一部分。

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

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

+0

这是一个很好的网页,可以解释您的一些猜测:http://www.regular-expressions.info/reference.html – Marcus

回答

12

这种模式可以允许所有不是数字或a-Z的字符。

[^\da-zA-Z] 

关于\W这是一个否定\w,这是一样的[A-Za-z0-9_]。因此\W是不是英文字母,数字或下划线的所有字符。

正如我为学习正则表达式提到的this is a great resource。这里有一个很好的网站test the regex

+0

我正在拍脑袋。非常感谢你,我甚至没有想过要做与以前的检查相反的事情。并感谢您将会派上用场的资源。 - 杰夫 – Jeff

+0

并感谢您的快速响应 – Jeff

2

您可以使用POSIX字符类[[:punct:]]的 '特殊' 字符:

<?php 
$regex = '[[:punct:]]'; 

if (preg_match('/'.$regex.'/', 'somepas$', $matches)) { 
    print_r($matches); 
} 
?> 

给出:

Array 
(
    [0] => $ 
) 
7

如果你想匹配的特殊字符

preg_match('/[\'\/~`\[email protected]#\$%\^&\*\(\)_\-\+=\{\}\[\]\|;:"\<\>,\.\?\\\]/', $input)