php - 密码正则表达式政府要求

标签 php mysql regex

对于政府主要承包商,希望根据他们的要求应用密码正则表达式:

  1. 至少一个大写字母
  2. 至少一个小写字母
  3. 至少一个数字
  4. 至少一个特殊字符

有以下代码:

if(empty(trim($_POST["password"]))) {
    $passwordErr = "Please enter a password.";
    } elseif(trim($_POST["password"]) === $username) {
        $passwordErr = "Cannot be the same as your username";
    } elseif(trim_check($_POST["password"]) == TRUE) {
        $passwordErr = "Please do not use a space in your password.";
    } elseif(!preg_match('/^(?=.*\d)(?=.*[\x21-\x7E])(?=.*[a-z])(?=.*[A-Z])[0-9A-Za-z\x21-\x7E]{6,50}$/',($_POST['password']))) {
        $passwordErr = "Must be six to fifty characters in length and at least one of each: <ul><li><strong>Uppercase</strong></li><li><strong>Lowercase</strong></li><li><strong>Number</strong></li><li><strong>Special Character</strong></li></ul>";
    } else {
        $password = trim($_POST['password']);
    }

传递给它的函数仅在确保没有空格之前修剪空格:

function trim_check($data) {
    $data = trim($data);
    $data = preg_match('/\s/',($data));
    return $data;
}

我想请教两件事:

  1. 是否在表达式的两个部分中使用 php regex for ascii 正确定义了 \x21-\x7E(有关这两个部分的含义,请参阅#2)。
  2. 表达式 [0-9A-Za-z\x21-\x7E] 的这部分内容是什么 (?=.*\d)(?=. *[\x21-\x7E])(?=.*[a-z])(?=.*[A-Z]) 还没有在做什么?

看起来工作正常,但我不知道我是否遗漏了一些东西。我能说的最多的是它必须至少包含: 1 大写 - 1 个小写字母 - 1 个号码 - 1 个特殊字符(空格除外),以及 - 必须是字母、数字和特殊字符(但我觉得这是多余的)

最佳答案

这是您当前的正则表达式,为了可读性分为多行:

^
    (?=.*\d)                     \
    (?=.*[\x21-\x7E])             \
    (?=.*[a-z])                   /  assert some conditions
    (?=.*[A-Z])                  /
    [0-9A-Za-z\x21-\x7E]{6,50}   --  match here
$

前四个正向先行断言数字、特殊字符、小写和大写字母在模式中出现一次或多次。但问题是,先行断言但实际上并不匹配或消耗任何东西。因此,正则表达式的最后部分执行以下操作:

[0-9A-Za-z\x21-\x7E]{6,50}

请注意,上述内容也仅限于上述类型的字符,并且仅允许 6 到 50 个字符。

关于php - 密码正则表达式政府要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55699165/

相关文章:

ruby - 正则表达式的 o 修饰符是什么意思?

java - 使用正则表达式搜索文本中的多个单词 (Java)

Python,正则表达式邮政编码搜索

php - 复选框数组仅显示选中的值 - PHP

php - wordpress 数据库返回 A

php - 具有许多属性的不可变对象(immutable对象)

php - 在类中使用 memcache

php - 如何将查询与sql中的表进行比较

php - 编码并从 mysql 数据库中提取

php - 如何将变量从 php 发送到 .sh 文件