我创建了一个简单的脚本,用于验证以下条件的密码
-
密码长度必须等于或大于8。
-
密码可选包含a-z,a-z,0-9表示用户仅通过字符、仅数字或混合字符和数字设置密码。
-
用户还可以在密码中混合这个字符,比如#、$、+、*。
所以下面的密码应该与匹配
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,}$
这创建了一个由合法字符组成的字符类,并量化了需要多少这样的字符;最少八个。它锚定在字符串的开始和结束处,因此字符串从开始到结束必须只包含这些字符。
如果你还需要设置一个最大长度,可以放在逗号后面的量词中。