所以基本上我试着让我的密码验证器检查我的密码,看它只包含一个且只有一个特殊字符(@ $#!*&)
到目前为止,我得到它以便它可以识别下面的参数中是否没有特殊字符,但我似乎无法弄清楚如何制作一个声明,使它能够识别它们是密码中只有一个特殊字符。
if [ `echo $password | grep -c -E "[@#$%&*+-=]+"` -eq 0 ]; then
echo "Error"
fi
答案 0 :(得分:0)
要验证组@#$%&*+-=
中是否只有一个字符,请运行:
p=${password//[^@#$%&*+=-]/}; [ "${#p}" -eq 1 ] || echo "Error"
请注意,在正则表达式[^@#$%&*+=-]
中,-
出现的位置很重要。它必须是第一个字符(在^
之后)或最后一个字符。如果它在中间,它将被解释为指示一系列字符。
或者,要验证这些字符中有一个或多个:
[ "${password//[^@#$%&*+=-]/}" ] || echo "Error"
至于你在评论中提到的其他测试:
要验证至少有一个小写字母:
[ "${password}" = "${password^^}" ] && echo "Error"
${password^^}
将所有字符转换为大写字母。如果这使password
保持不变,则不会显示小写字母并显示Error
。
要验证至少有一个大写字母:
[ "${password}" = "${password,,}" ] && echo "Error"
${password,,}
将所有字符转换为小写字母。如果这使password
保持不变,则不会显示大写字符并显示Error
。
要验证至少有一个号码:
[ "${password//[^0-9]/}" ] || echo "Error"
${password//[^0-9]/}
删除password
中的所有非数字。如果此后没有剩余字符,则会显示Error
。
所有这些测试都基于bash
参数扩展。