2013-06-01 27 views
5

enthält Wie kann ich überprüfen, ob eine bestimmte Zeichenfolge nicht numerische Zeichen enthält, Beispiele:Überprüfen Sie, ob Zeichenfolge nicht nummerische Zeichen

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

von Charakter meine ich alles nicht zwischen 0-9. Ich sah ähnliche Threads, aber nicht von ihnen spricht über "nicht 0-9", außer sie zeigen, wenn es a-z oder A-Z ist.

Antwort

3

Nur eine negierte Zeichenklasse verwenden:

grep [^0-9] 

Dadurch werden alle nicht-numerischen Zeichen übereinstimmen, und nicht die Saiten nur Ziffern zusammengesetzt.

+0

Können wir eine Zeichenklasse verwenden, '[: digit:]'? – tarabyte

2

Etwas wie folgt aus:

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

oder

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

Nur durch bash Mustervergleich mit:

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

brauchst du die^und $? Wenn Sie mit einer beliebigen Ziffer übereinstimmen, ist das ein Fehler. – kdubs

+0

Was bedeutet '= ~? – tarabyte

1

Eine weitere Möglichkeit, ein heftiger Schlag "Eindämmung" überprüfen

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

Die meisten dieser Vorschläge geben true zurück, wenn das erste Zeichen eine Ziffer ist, aber keine Fehler in der Zeichenfolge gefunden werden. Die folgende Funktion gibt true zurück, wenn die gesamte Zeichenfolge Ziffern ist, false, wenn keine Ziffern in der Zeichenfolge gefunden werden.

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

Und dann könnten Sie etwas wie 'if isdigit $ 1; dann Echo "ist Ziffer"; sonst echo "nop"; fi' – elysch

Verwandte Themen