Você pode fazer:
[[ $var = +([[:alnum:]]) ]]
Isso funcionaria nas implementações AT & T ksh e zsh
de ksh
, mas aparentemente não em pdksh
-based. Isso funciona em zsh -o kshglob
(como quando zsh
é invocado como ksh
) ou bash -O extglob
também.
+(...)
é ksh
curinga para um ou mais . [[:alnum:]]
é qualquer caractere considerado alfanumérico na localidade atual (em qualquer alfabeto, não necessariamente apenas no alfabeto latino).
Se você quiser limitar as letras e os dígitos em inglês, supondo que a variável LC_ALL
não esteja definida, você pode fazer:
LC_COLLATE=C; [[ $var = +([a-zA-Z0-9]) ]]
Se não:
[[ $var = +([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]) ]]
Isto:
LC_ALL=C; [[ $var = +([[:alnum:]]) ]]
Também deve funcionar, embora mude o significado dos caracteres. Porque caracteres que conteriam bytes que de outra forma correspondem a alvos ASCII (como por exemplo £ em GB18030 que é codificado como 81 30 84 35 onde 30 também é ASCII 0) também conteriam bytes que não estão em ASCII (como 81 84 para £), e todos os conjuntos de caracteres em um determinado sistema têm que concordar com a codificação dos caracteres no conjunto de caracteres portátil que inclui todos os alfanuméricos em inglês.
Observe também que, nas localidades UTF-8, ksh93u + (pelo menos) tem um erro no momento em que $var
contém sequências de bytes que não formam caracteres válidos, mas esses bytes correspondem a alnums na ISO-8859 -1 conjunto de caracteres, então eles seriam considerados como alnums
. Por exemplo, $'A\xe9B'
seria considerado alfanumérico porque 0xe9 é é em ISO-8859-1. (U + 00E9 é é
, mas a codificação UTF-8 de é é 0xc3 0xa9, não 0xe9).