Wie um zu überprüfen, ob ein string enthält nur A-Z, a-z und 0-9?
Was ist der beste Weg, um zu validieren, die eine Zeichenfolge mit einem Muster? Ich würde PCRE, aber ich weiß nicht, ob es eingebettet ist in jeder shell und wie Sie es verwenden.
Zum Beispiel, wie könnte ich überprüfen, dass die variable enthält nur A-Z, a-Z und 0-9 und keine Leerzeichen, ', ", ... ?
In der Regel in der bash werden Sie wollen, verlassen Sie sich ziemlich stark auf
grep
oder awk
zu jedem pattern-matching.
InformationsquelleAutor iwalktheline | 2011-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
InformationsquelleAutor Ignacio Vazquez-Abrams
nützliche Ressourcen: http://bashshell.net/regular-expressions/ , http://www.gnu.org/software/bash/manual/bashref.html
[:alnum:]
benötigt einen weiteren Satz von Klammern, und sollten befolgt werden, von*
zu lassen, es mit mehr als einem Zeichen. Feste version:if [[ "$VARIABLE" =~ ^[[:alnum:]]*$ ]]; then do something; fi
Danke für die Korrektur der syntax. Aktualisiert um nicht zu verwirren.
Seien Sie vorsichtig mit diesem ein.
$ [[ "一" =~ ^[[:alnum:]]*$ ]] ; echo $?
0
druckt 1 für mich (wie erwartet). Ist
一
im alnum-Zeichen Klasse in einige andere locale (ich bin mit LANG=en_US.UTF-8)?Wenn Ihr bash verwendet Unicode-Klassen, dann wird es wahr, wie
一
ist "1" in der japanischen.InformationsquelleAutor Martin
Einem reinen shell-option
InformationsquelleAutor Seth Robertson
Die einzige tragbare (kein bash Mist) Weg:
Beachten Sie, dass kein externes Programm gestartet wird, so ist dies schneller als
grep
et al. Lösungen.Beachten Sie, dass Charakter-Klassen sind in der Regel (nicht nur bei shell) - locale-sensitive.
So möchten Sie vielleicht zu prüfen, vorübergehend festlegen der locale-Einstellung, zu
C
oder der Klasse selbstInformationsquelleAutor Jo So