我试图验证密码。
密码的长度必须至少为7,并包含数字值和字母值。
我的正则表达式适用于多个在线测试工具,如http://www.regextester.com/。
但由于某些原因,我的剧本不会工作。
if [[ "$1" =~ ^((?=.*[[:digit:]])(?=.*[[:alnum:]]).{7,})$ ]]; then
printf "DEBUG: password match\n"
return 0
else
printf "DEBUG: password no match\n"
return 1
fi
提前致谢
答案 0 :(得分:3)
POSIX正则表达式不支持Perl样式的rAmCharts
预见断言。你可以在这里使用简单的模式匹配。
(?=...)
第一次检查确保有一个数字,第二个检查确保有一个数字。最后一次检查验证值中某处有7个字符的子字符串(这意味着总长度至少为7)。您也可以将其替换为if [[ $1 == *[[:digit:]]* && $1 == *[[:alpha:]]* && $1 =~ .{7} ]]; then
。
答案 1 :(得分:0)
#!/bin/bash
password=$1
if [[ ${#password} -ge 7 && "$password" == *[A-Z]* && "$password" == *[a-z]* && "$password" == *[0-9]* ]]; then
printf "DEBUG: password match\n"
else
printf "DEBUG: password no match\n"
fi