2013-06-01 21 views
5

Come posso verificare se una determinata stringa contiene caratteri non numerici, esempi:Controllare se la stringa contiene caratteri non numerici

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

per carattere voglio dire tutto non tra 0-9. Ho visto thread simili ma non di loro parla di "non 0-9" tranne che mostrano se è il suo a-z o A-Z.

risposta

3

Basta utilizzare una classe di caratteri negata:

grep [^0-9] 

Questo corrisponderà a qualsiasi carattere non numerico, e non le stringhe composte solo cifre.

+0

possiamo usare una classe di caratteri, '[: digit:]'? – tarabyte

2

Qualcosa di simile a questo:

if [[ "xf44wd" =~ [0-9]+ ]]; then 
    echo "contains $?" 
    else 
    echo "does no contains $?" 
fi 

o

if [[ ! "xf44wd" =~ [0-9]+ ]]; then 
    echo "does not contains $?" 
    else 
    echo "contains $?" 
fi 
8

semplicemente utilizzando bash pattern matching:

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

hai bisogno di^e $? Se si abbina qualsiasi cifra diversa, si tratta di un errore. – kdubs

+0

cosa significa '= ~'? – tarabyte

1

Un'altra opzione, un bash "contenimento" controllare

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

La maggior parte di questi suggerimenti restituisce true se il primo carattere è una cifra, ma non trova errori all'interno della stringa. La funzione seguente restituisce true se l'intera stringa è cifre, false se vengono rilevati caratteri non numerici nella stringa.

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

E quindi potresti usare qualcosa come 'if isdigit $ 1; quindi echo "is digit"; else echo "nop"; fi' – elysch

Problemi correlati