检查字符串是否包含非数字字符

时间:2013-06-01 17:44:08

标签: bash grep

如何检查给定字符串是否包含非数字字符,例如:

x11z returns > 0
x$1 also returns > 0
1111~ also returns > 0

我的意思是0-9之间的一切。我看到了类似的主题,但是没有他们谈论“非0-9”,除了它们显示它是a-z还是A-Z

5 个答案:

答案 0 :(得分:8)

只需使用bash模式匹配:

[[ "$MY_VAR" =~ ^[^0-9]+$ ]] && echo "no digit in $MY_VAR"

答案 1 :(得分:7)

只使用否定的字符类:

grep [^0-9]

这将匹配任何非数字字符,而不是仅由数字组成的字符串。

答案 2 :(得分:2)

这样的事情:

if [[ "xf44wd" =~ [0-9]+ ]]; then
    echo "contains $?"
    else
    echo "does no contains $?"
fi

if [[ ! "xf44wd" =~ [0-9]+ ]]; then
    echo "does not contains $?"
    else
    echo "contains $?"
fi

答案 3 :(得分:2)

如果第一个字符是数字,但大多数建议都返回true,但在字符串中找不到错误。如果整个字符串是数字,则下面的函数返回true,如果在字符串中检测到任何非数字,则返回false。

function isdigit () {
   [ $# -eq 1 ] || return 1;
   [[ $1 = *[^0-9]* ]] && return 1
   return 0
}

答案 4 :(得分:1)

另一种选择,bash“收容”检查

[[ "xf4fgh" = *[^0-9]* ]]
echo $?
0
[[ "1234" = *[^0-9]* ]]
echo $?
1