使用模式验证字符串的最佳方法是什么?我会使用PCRE,但我不知道它是否嵌入在每个shell中以及如何使用它。
例如,如何验证该变量仅包含A-Z,a-Z和0-9且不包含空格',',...?
答案 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]*}" ]`