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

7

如何检查一个字符串中是否包含非数字字符,例如:

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

在这里,“字符”指的是除了0-9之外的所有内容。我看到了一些类似的帖子,但没有一个讨论“非0-9”的情况,除非它们显示的是a-zA-Z

5个回答

10

只需使用否定字符类:

grep [^0-9]

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


我们可以使用字符类[:digit:]吗? - tarabyte

8
仅通过使用模式匹配即可:
[[ "$MY_VAR" =~ ^[^0-9]+$ ]] && echo "no digit in $MY_VAR"

你需要使用 ^ 和 $ 吗?如果匹配到任何非数字字符,那么匹配失败。 - kdubs
=~ 是什么意思? - tarabyte

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

3

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

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

然后你可以使用类似 if isdigit $1; then echo "is digit"; else echo "nop"; fi 的东西。 - elysch

1
另一种选择,一个bash的“包含”检查。
[[ "xf4fgh" = *[^0-9]* ]]
echo $?
0
[[ "1234" = *[^0-9]* ]]
echo $?
1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接