Bash 如果条件不满足';行不通
用于密码检查的if条件中的正则表达式。条件是:Bash 如果条件不满足';行不通,bash,shell,Bash,Shell,用于密码检查的if条件中的正则表达式。条件是: 密码长度必须大于14 它至少应包含1个大写字母 它至少应包含1个小写字母 它至少应包含1个特殊字符 所有这些代码都应该在shell脚本中 请帮帮我。代码总是打印错误 password="Testing@1234Test" correct_password="^(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[^A-Za-z0-9]).{14,}$" if [[ $password =~ $correct_password
password="Testing@1234Test"
correct_password="^(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[^A-Za-z0-9]).{14,}$"
if [[ $password =~ $correct_password ]]; then echo "correct" ; exit
else echo "wrong"
fi
试试这个:
[[ ${#a} -ge 14 && "$a" == *[A-Z]* && "$a" == *[a-z]* && "$a" == *[0-9]* && "$a" == *[@#$*%^\!]* ]]
您需要根据需要在最后一个条件中添加特殊字符,并注意一些特殊字符需要转义。Bash regex不支持lookarounds,这是复杂密码regex真正需要的。因此,也许您应该在其他地方处理这个问题,例如在Java或C#等应用程序中。应该指出的是,这是全局性的,而问题特别要求正则表达式(假设OP知道差异)。是的,更具体地说,我需要评估if条件下的正则表达式,它在bash中不起作用,即使正则表达式完全正常。@Technocrat:我给出的glob在if条件下不起作用,或者你是在谈论先前答案中发布的正则表达式吗?@Samarth我说的是正则表达式,而不是那是什么given@Technocrat:在bash中的
if
中,必须将[[]]
(而不是[]]
)与=~
一起用于正则表达式,或与=
一起用于全局搜索。在这两种情况下,图案必须位于右侧。你在做这些吗?请在问题中显示您的代码。