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

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

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

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

str="$1"

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

if [[ "$str" =~ $regex ]]
then
  echo "f yeah"
else
  echo "f you"
fi

但这似乎不起作用。在我看来,我还差得很远。

允许的字符列表是:

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

不知道我在这里缺少什么。

答案1

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

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

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

相关内容