在bash脚本中使用密码验证似乎让我在工作中感到困惑



我创建了一个简单的脚本,用于验证以下条件的密码

  1. 密码长度必须等于或大于8。

  2. 密码可选包含a-z,a-z,0-9表示用户仅通过字符、仅数字或混合字符和数字设置密码。

  3. 用户还可以在密码中混合这个字符,比如#、$、+、*。

所以下面的密码应该与匹配

ptr*1$#+22A
111111111BB
password123

但如果用户传递的字符超出标准意味着低于密码应被拒绝,它将被拒绝。

ptr*1$#+22A: //because ":" at the end of string which not in criteria 

我的脚本如下

#! /bin/bash
password="ptr*1$#+22A"
if [[ ${#password} -ge 8 && "$password" || *[A-Z]* || "$password" || *[a-z]* || "$password" || *[0-9]* && "$password" || *[*$#+]* ]]
then
echo "pass"
else
echo "fail"
fi

它正在为匹配的密码工作,但它也会传递密码ptr*1$#+22A:,它必须拒绝。

脚本中的问题是,如果在CCD_ 2之后任何一个语句为true,则条件将为true。我已经用&&代替||尝试了这个脚本,但它要求密码必须至少包含一个符合标准的字符,这不是我的要求。

所以有人知道如何验证我的密码,使其符合我的标准吗?

逻辑可以滚动到一个正则表达式中,该表达式只允许您希望允许的字符,并且至少需要八个字符(我认为您可能需要将长度限制在数据库字段中可以存储的任何字符,但您没有指定)

你的模式应该是这样的:

^[A-Za-z0-9#$+*]{8,}$

这创建了一个由合法字符组成的字符类,并量化了需要多少这样的字符;最少八个。它锚定在字符串的开始和结束处,因此字符串从开始到结束必须只包含这些字符。

如果你还需要设置一个最大长度,可以放在逗号后面的量词中。

相关内容

  • 没有找到相关文章

最新更新