首页 > 解决方案 > Bash:正则表达式确定字符串是否至少包含@、#、$、%、&、*、+、-、= 之一

问题描述

我需要检查一个字符串是否包含至少一个字符:@、#、$、%、&、*、+、-、= 在我将星号放入正则表达式模式之前一切正常,甚至转义星号。这是我的代码,请帮忙,谢谢!

if [[ ! "$1" =~ .*[@#%$\&+=-\*].* ]]; then
  echo "Password must contain at least 1 special character(s)."
  exit 1
fi

标签: bash

解决方案


您是否尝试过使用多个转义?有时单个反斜杠不起作用的原因是因为有几个“级别”的解释正在进行。因此,两个、三个或四个逃逸可能在一个不可行的情况下起作用。这是一个额外的反斜杠,如果这不起作用,您可以尝试添加更多。

if [[ ! "$1" =~ .*[@#%$\&+=-\\*].* ]]; then
  echo "Password must contain at least 1 special character(s)."
  exit 1
fi

推荐阅读