Bash(Posix)正则表达式不匹配

时间:2016-10-07 11:29:49

标签: regex bash unix

我试图验证密码。
密码的长度必须至少为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

提前致谢

2 个答案:

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