BASH检查字母数字和斜杠

时间:2014-06-30 14:45:00

标签: bash

我想检查输入是否只包含字母数字字符和/斜杠。

我的代码:

if [ ! -z `echo $2 | tr -d "[\/:alnum:]"` ]; then
    echo "Error: input contains non-alphanumeric characters."
    exit 1 
fi

如果我输入.script.sh /example/test/,则会抛出错误。为什么呢?

3 个答案:

答案 0 :(得分:1)

您可以将tr用作tr -d '[:alnum:]\/'

示例:

str="123.abc?/123#"; tr -d '[:alnum:]\/' <<<$str
.?#

您可以在上面的示例中看到任何不是字母数字和/的内容。

if内使用:

str="abc123/"; if [ -n "$(tr -d '[:alnum:]\/' <<<$str)" ];then echo invalid; else echo valid; fi
valid

str="abc123/."; if [ -n "$(tr -d '[:alnum:]\/' <<<$str)" ];then echo invalid; else echo valid; fi
invalid

所以你的代码应该是这样的:

if [ -n "$(tr -d '[:alnum:]\/' <<<$2)" ]; then
...

答案 1 :(得分:0)

您不需要tr,可以在纯BASH中完成:

if [[ ! "$2" != *[^[:alnum:]/]* ]]; then
   echo "Error: input contains non-alphanumeric characters."
   exit 1
fi

编辑:感谢@kojiro这个解决方案不需要正则表达式:

if [[ ! "$2" != *[^[:alnum:]/]* ]]; then
   echo "Error: input contains non-alphanumeric characters."
   exit 1
fi

答案 2 :(得分:0)

因为只要你找到一个[^ 0-9 /]或$ 2是EMPTY就会失败,你可以采取以下措施:

if [[ -z "$2" || "$2" =~ [^0-9/] ]]; then
    echo "Error: input contains non-alphanumeric characters."
    exit 1 
fi