Regex强密码的特殊字符

col17t5w  于 2023-01-18  发布在  其他
关注(0)|答案(6)|浏览(132)

我目前正在用regex做一些测试。我有一个练习,要求检查强密码,这意味着它应该有:至少一个数字,一个小写字母,一个大写字母,没有空格,至少一个非字母或数字的字符。并且它应该在8-16个字符之间。
我写了这段代码:

<?php

  $passwords = array("Jtuhn", "12J@k", "jok", "Joan 12@45", "Jghf2@45", "Joan=?j123j");

  foreach($passwords as $pass)
  {
    ///^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$/
    if(strlen($pass) >= 8 && strlen($pass) < 17)
     {
       if(preg_match("/^\w*(?=\w*\d)(?=\w*[A-Z])(?=\w*[^0-9A-Za-z])(?=\w*[a-z])\w*$/", $pass) )
        echo "$pass => MATCH<br>";
       else
        echo "$pass => FAIL<br>";
     }
    else
      echo "$pass => FAIL(because of length)<br>";
  }
 ?>

最后两个应该匹配,但他们失败了。我认为问题在于

(?=\w*[^0-9A-Za-z])

这应该是模式匹配,至少有一个字符不是字母或数字,但我不知道为什么。我知道这个强密码在互联网上解决,但这不是我的问题。我的问题是为什么这部分工作不做应该做的事情。

xytpbqjk

xytpbqjk1#

您可以将正则表达式拆分为不同的检查。
它将允许您编写更可读的条件并显示特定的错误消息。尽管如此,regexp模式将更容易编写和理解。
即:

$errors = array();
if (strlen($pass) < 8 || strlen($pass) > 16) {
    $errors[] = "Password should be min 8 characters and max 16 characters";
}
if (!preg_match("/\d/", $pass)) {
    $errors[] = "Password should contain at least one digit";
}
if (!preg_match("/[A-Z]/", $pass)) {
    $errors[] = "Password should contain at least one Capital Letter";
}
if (!preg_match("/[a-z]/", $pass)) {
    $errors[] = "Password should contain at least one small Letter";
}
if (!preg_match("/\W/", $pass)) {
    $errors[] = "Password should contain at least one special character";
}
if (preg_match("/\s/", $pass)) {
    $errors[] = "Password should not contain any white space";
}

if ($errors) {
    foreach ($errors as $error) {
        echo $error . "\n";
    }
    die();
} else {
    echo "$pass => MATCH\n";
}

希望有帮助。

1dkrff03

1dkrff032#

你可以试试这个:

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.* )(?=.*[^a-zA-Z0-9]).{8,16}$

它能满足你所有的要求
Explanation

  1. (?=.*\d)至少一位数字
  2. (?=.*[a-z])至少一个小写字母
  3. (?=.*[A-Z])至少一个大写字母
  4. (?!.* )无空格
  5. (?=.*[^a-zA-Z0-9])a-zA-Z0-9外至少有一个字符
  6. .{8,16}介于8到16个字符之间
    样本代码:
<?php
$re = '/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.* )(?=.*[^a-zA-Z0-9]).{8,16}$/m';
$str = 'Jtuhn
12J@k
jok
Joan 12@45
Jghf2@45
Joan=?j123j
';

preg_match_all($re, $str, $matches);
print_r($matches);

?>

Run it here

wgeznvg7

wgeznvg73#

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}\S+$

//The rule is at least
   one upper case, one lower case, one digit[0-9], 
   one special character[#?!@$%^&*-] and the minimum length should be 8.
drkbr07n

drkbr07n4#

使用这个简单的正则表达式来测试强密码

/(?=^.{8,}$)(?=.{0,}[A-Z])(?=.{0,}[a-z])(?=.{0,}\W)(?=.{0,}\d)/g

Javascript:

var password = "Abcdef@1234"
var passwordRegex = /(?=^.{8,}$)(?=.{0,}[A-Z])(?=.{0,}[a-z])(?=.{0,}\W)(?=.{0,}\d)/g

var isStrongPassword = passwordRegex.test(password)

console.log(isStrongPassword, "<Strong password>")

1.最小长度8个字符
1.至少1个大写字母
1.至少1个小写字母
1.至少1个特殊字符
1.至少1位数字

vqlkdk9b

vqlkdk9b5#

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[special characters]).{8,16}$

根据要求添加特殊字符。
以上代码检查以下条件

  • 至少1个大写字符
  • 至少1个小写字符
  • 至少1位数字
  • 至少1个特殊字符

Click here to test

r7knjye2

r7knjye26#

使用下面的代码创建强密码。密码必须包含8个字符,并且可以混合使用字母(大小写)、数字和符号:
$pswrdChk = '测试@123';
如果(!preg_match('/^(?=.[\W])(?=.[a-z])(?=.[A-Z])(?=.[0-9]).{8,50}$/',$pswrdChk))
{
echo“至少使用8个字符以及字母(大写和小写)、数字和符号的组合。";
}
否则
{
echo“密码有效”;
}

相关问题