6

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

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

我所说的字符是指不在之间的所有内容0-9。我看到了类似的线程,但没有一个人谈论“非 0-9”,除非它们显示它的a-zor A-Z

4

5 回答 5

8

只需使用否定字符类:

grep [^0-9]

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

于 2013-06-01T17:47:09.503 回答
8

只需使用bash模式匹配:

[[ "$MY_VAR" =~ ^[^0-9]+$ ]] && echo "no digit in $MY_VAR"
于 2013-06-01T18:11:52.013 回答
3

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

function isdigit () {
   [ $# -eq 1 ] || return 1;
   [[ $1 = *[^0-9]* ]] && return 1
   return 0
}
于 2013-11-15T17:44:48.793 回答
3

像这样的东西:

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
于 2013-06-01T18:04:47.700 回答
1

另一种选择,bash“遏制”检查

[[ "xf4fgh" = *[^0-9]* ]]
echo $?
0
[[ "1234" = *[^0-9]* ]]
echo $?
1
于 2013-06-01T18:17:58.443 回答