2013-06-01 64 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

相關問題