如何在A-Z和1-9之间限制密码

时间:2019-01-11 00:32:28

标签: shell passwords sh

如何在shell sh中检查密码是否仅包含A-Z字母和/或1-9的数字

2 个答案:

答案 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;

但这将是弱密码。对于密码,您宁愿进行相反的检查,即它们不只包含大写字母和十进制数字!