如何检查字符串是否只包含A-Z,a-z和0-9?

时间:2011-06-06 20:07:56

标签: regex validation bash pcre

使用模式验证字符串的最佳方法是什么?我会使用PCRE,但我不知道它是否嵌入在每个shell中以及如何使用它。

例如,如何验证该变量仅包含A-Z,a-Z和0-9且不包含空格',',...?

4 个答案:

答案 0 :(得分:11)

$ [[ "foo" =~ ^[A-Za-z0-9]*$ ]] ; echo $?
0
$ [[ "foo " =~ ^[A-Za-z0-9]*$ ]] ; echo $?
1

答案 1 :(得分:3)

if [[ "$VARIABLE" =~ ^[[:alnum:]]*$ ]]; then do something; fi;

有用资源:http://bashshell.net/regular-expressions/http://www.gnu.org/software/bash/manual/bashref.html

答案 2 :(得分:2)

if `echo $VARIABLE | egrep '[^A-Za-z0-9]'`; then echo VARIABLE IS BAD; fi

纯shell选项

case "$VARAIBLE" in *[^A-Za-z0-9]*) echo VARIABLE IS BAD;; esac

答案 3 :(得分:-1)

唯一的便携式(无bash垃圾)方式:

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

请注意,没有启动外部程序,因此这比grep等更高效。的解决方案。

请注意,字符类通常(不仅在shell中)区域设置敏感。

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

因此,您可能需要考虑暂时将语言环境设置为C或自己制作课程

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