如何在shell sh中检查密码是否仅包含A-Z字母和/或1-9的数字
答案 0 :(得分:1)
如果您正在使用bash,则可以使用扩展模式。
if [[ $password == +([A-Z1-9]) ]]; then echo OK; fi
此处记录:https://www.gnu.org/software/bash/manual/bashref.html#index-_005b_005b
使用'=='和'!='运算符时,该运算符右边的字符串被视为一种模式,并根据下面Pattern Matching中所述的规则进行匹配,就像{{ 1}} shell选项已启用。
另一种POSIX sh解决方案是使用extglob
并查找不不符合条件的字符:
case
答案 1 :(得分:0)
您可以使用tidyverse
将字符串与正则表达式进行匹配。
expr
if [ $(expr "$string" : '[A-Z1-9]*$') != 0 ]; then
# valid
else
# not valid
fi;
输出匹配数,即在这种情况下,当字符串确定时,字符串的长度。
正则表达式隐式地锚定在字符串的开头。如果您愿意,可以在expr
前面加上一个^
,但这是多余的。
如果您还想接受空字符串,则必须明确检查它们,因为对于空字符串,expr
会像没有匹配项时一样输出0
。
if [ $(expr "$string" : '[A-Z1-9]*$') != 0 -o -z "$string" ]; then
# valid
else
# not valid
fi;
但这将是弱密码。对于密码,您宁愿进行相反的检查,即它们不只包含大写字母和十进制数字!