2013-06-01 63 views
5

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

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

通过角色,我的意思是一切不0-9之间。我看到类似的线索,但他们没有谈到“非0-9”,除非他们显示其a-zA-Z

回答

3

只需用一个否定的字符类:

grep [^0-9] 

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

+0

我们可以使用一个字符类'':digit:]'吗? – tarabyte

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 
8

只需使用bash模式匹配:

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

你需要^和$吗?如果你匹配任何非数字,这是一个失败。 – kdubs

+0

'=〜'是什么意思? – tarabyte

1

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

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

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

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

然后你可以使用类似'if isdigit $ 1;然后回声“是数字”;其他回声“nop”; fi' – elysch

相关问题