2013-06-01 7 views
5

Как я могу проверить, если данная строка содержит не числовые символы, примеры:Проверьте, если строка содержит не значные символы

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

По характеру я имею в виду все, что не между 0-9. Я видел похожие темы, но не из них говорит о «non 0-9», кроме того, что они показывают, если его a-z или A-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

Другой вариант, Баш "сдерживания" проверить

[[ "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; затем эхо «цифра»; else echo "nop"; fi' – elysch

Смежные вопросы