【问题标题】:Preg_match for all special characters, password checkingPreg_match 所有特殊字符,密码检查
【发布时间】:2011-11-08 16:32:56
【问题描述】:

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

任何人都可以免费使用它,因为我认为很多人一直在寻找它。

【问题讨论】:

标签: php preg-match special-characters


【解决方案1】:

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

[^\da-zA-Z]

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

正如我在评论this is a great resource 中提到的学习正则表达式。这是test the regex 的好网站。

【讨论】:

  • 我在拍自己的头。非常感谢,我什至没有想过要与之前的检查相反。并感谢您提供的资源,它将派上用场。 - 杰夫
【解决方案2】:

如果你想匹配特殊字符

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

【讨论】:

    【解决方案3】:

    您可以将 POSIX 字符类 [[:punct:]] 用于“特殊”字符:

    <?php
    $regex = '[[:punct:]]';
    
    if (preg_match('/'.$regex.'/', 'somepas$', $matches)) {
        print_r($matches);
    }
    ?>
    

    给予:

    Array
    (
        [0] => $
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 2017-06-30
      相关资源
      最近更新 更多