Как проверить, содержит ли строка только A-Z, a-z и 0-9? - PullRequest
3 голосов
/ 07 июня 2011

Каков наилучший способ проверки строки с шаблоном?Я бы использовал PCRE, но я не знаю, встроен ли он в каждую оболочку и как его использовать.

Например, как я могу проверить, что эта переменная содержит только AZ, aZ и 0-9 и несодержать пробелы, ', ", ...?

Ответы [ 4 ]

11 голосов
/ 07 июня 2011
$ [[ "foo" =~ ^[A-Za-z0-9]*$ ]] ; echo $?
0
$ [[ "foo " =~ ^[A-Za-z0-9]*$ ]] ; echo $?
1
3 голосов
/ 07 июня 2011
if [[ "$VARIABLE" =~ ^[[:alnum:]]*$ ]]; then do something; fi;

полезных ресурсов: http://bashshell.net/regular-expressions/, http://www.gnu.org/software/bash/manual/bashref.html

2 голосов
/ 07 июня 2011
if `echo $VARIABLE | egrep '[^A-Za-z0-9]'`; then echo VARIABLE IS BAD; fi

Опция чистой оболочки

case "$VARAIBLE" in *[^A-Za-z0-9]*) echo VARIABLE IS BAD;; esac
0 голосов
/ 07 августа 2013

Единственный переносимый (без всякого дерьма) способ:

`[ "${var%%*[^A-Za-z0-9]*}" ]`

Обратите внимание, что внешняя программа не запускается, поэтому она более производительна, чем grep et al. решения.

Обратите внимание, что классы символов обычно (не только в оболочке) чувствительны к локали.

var=ä
[ "${var%%*[^a-z]*}" ] && echo match  # prints "match"

Так что вы можете временно установить для языкового стандарта значение C или создать класс самостоятельно

`[ "${var%%*[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*}" ]`
...