什么是验证字符串模式的最佳方法?我会使用PCRE,但我不知道它是否嵌入到每个shell中以及如何使用它。
例如,我该如何验证变量仅包含A-Z、a-z和0-9,并且不包含空格、'、"等字符?
例如,我该如何验证变量仅包含A-Z、a-z和0-9,并且不包含空格、'、"等字符?
$ [[ "foo" =~ ^[A-Za-z0-9]*$ ]] ; echo $?
0
$ [[ "foo " =~ ^[A-Za-z0-9]*$ ]] ; echo $?
1
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
if [[ "$VARIABLE" =~ ^[[:alnum:]]*$ ]]; then do something; fi;
有用的资源:http://bashshell.net/regular-expressions/,http://www.gnu.org/software/bash/manual/bashref.html
这些链接是关于IT技术中的正则表达式和Bash命令行的有用资源。希望对您有所帮助。[:alnum:]
需要另一组括号,并且应该跟随*
以使其匹配多个字符。修正版本:if [[ "$VARIABLE" =~ ^[[:alnum:]]*$ ]]; then do something; fi
- Gordon Davisson$ [[ "一" =~ ^[[:alnum:]]*$ ]] ; echo $?
0
- Ignacio Vazquez-Abrams一
在其他语言环境中是否属于alnum字符类(我正在使用LANG=en_US.UTF-8)? - Gordon Davisson一
在日语中是“1”。 - Ignacio Vazquez-Abrams唯一可移植的方式(没有bash垃圾):
`[ "${var%%*[^A-Za-z0-9]*}" ]`
grep
等解决方案更高效。var=ä
[ "${var%%*[^a-z]*}" ] && echo match # prints "match"
`[ "${var%%*[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*}" ]`
grep
或awk
来进行任何模式匹配。 - Chris Eberle