我在 Bash Shell脚本中使用正则表达式。我使用下面的正则表达式代码来检查密码标准:密码应至少6个字符长,至少一个数字和至少一个大写字母。我在正则表达式验证工具中验证,我已经形成的正则表达式工作正常。但是,它在Bash Shell Script中失败了。请提供您的想法。
echo "Please enter password for User to be created in OIM: "
echo "******Please Note: Password should be at least 6 characters long with one digit and one Upper case Alphabet******"
read user_passwd
regex="^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)\S{6,}$"
echo $user_passwd
echo $regex
if [[ $user_passwd =~ $regex ]]; then
echolog "Password Matches the criteria"
else
echo "Password criteria: Password should be at least 6 characters long with one digit and one Upper case Alphabet"
echo "Password does not Match the criteria, exiting..."
exit
fi
答案 0 :(得分:4)
BASH正则表达式引擎不支持正则表达式中的外观。
您可以使用以下shell glob检查来确保密码符合您的条件:
[[ ${#s} -ge 6 && "$s" == *[A-Z]* && "$s" == *[a-z]* && "$s" == *[0-9]* ]]
它将确保输入字符串$s
满足所有这些条件:
答案 1 :(得分:0)
我正在添加anubhava的答案。他的支票对我有用,但并不完全。
例如“ hello123”或“ HELLO123”也通过了检查,因此未检测到大小写。
问题出在语言环境设置,更具体地说是LC_COLLATE
变量。考虑到大小写,需要将其设置为“ C”。
但是更好的解决方案是使用字符类而不是范围表达式。
说明here帮助我解决了问题。最终使用字符类对我有用。
[[ ${#s} -ge 6 && "$s" == *[[:lower:]]* && "$s" == *[[:upper:]]* && "$s" == *[0-9]* ]]