正则表达式 - 脚本检查允许的字符

cod*_*ous 0 bash shell-script regular-expression

我需要检查一个字符串并确保它不包含给定字符列表之外的任何字符。

我写了一个脚本来测试这个:

str="$1"

regex="^[0-9a-zA-Z\,\!\-\^\`@\{\}\[\],=\(\).;\/~_|]*$"

if [[ "$str" =~ $regex ]]
then
  echo "f yeah"
else
  echo "f you"
fi
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用。在我看来,我什至不接近。

允许的字符列表是:

a-z A-Z 0-9 ` @ { } [ ] ^ , = ! ( ) . ; / ~ _ |
Run Code Online (Sandbox Code Playgroud)

不确定我在这里缺少什么。

cho*_*oba 5

您不能通过]反斜杠将 a包含到字符类中。它必须是类中的第一个元素。冲刺也是如此,但这一次,它必须最后一次。\-\^只匹配从\to的范围\,即反斜杠和插入符号。(我也删除了无用的反斜杠)。

regex='^[]0-9a-zA-Z,!^`@{}=().;/~_|[-]*$'
Run Code Online (Sandbox Code Playgroud)

你确定你想要*,不是+吗?你真的要接受空字符串吗?