我正在编写一个清理用户输入的 bash 验证函数。
这个想法是,如果一个脚本有 3 个参数,这些参数可能只是字母数字值。但是一个参数可以是用双引号括起来的多个单词,如下所示:
myfunction arg1 arg2 “这是 arg3”
所以我基本上是想去掉所有不是字母数字或空格字符的东西。
目前,我有:
validateEntry() {
字符串=$1
clean=${string//[^a-zA-Z0-9\s]/}
}
但是好像不行。在 myfunction arg1 arg2 "this is arg3"
中,is arg3
被删除。
我使用此函数的方式是在脚本中,如下所示:
name=$(validateEntry $1)
我需要这方面的帮助。
编辑:
想法是在脚本中使用 validateEntry
函数,比方说,它可以接受 3 个参数,如下所示:
if [[ "$#" -eq 3 ]]; then
arg1=$(validateEntry $1)
arg2=$(validateEntry $2)
arg3=$(validateEntry $3)
echo "${arg1}, ${arg2}, ${arg3}."
fi
但是,如果我的脚本的第三个参数是 this is arg3
,$arg3
将缩减为 this
,即使当我调用我的函数时直接,使用相同的三个参数,第三个参数是 this is arg3
最佳答案
\s
并不表示模式(不是正则表达式)中的“任何类型的空格”。相反,要么只使用文字空间
clean=${1//[^a-zA-Z0-9 ]}
或者,如果您想匹配空格、制表符、换行符等,请使用 POSIX 字符类 [:space:]
:
clean=${1//[^a-zA-Z0-9[:space:]]}
(就此而言,您也可以为字母和数字使用字符类:
clean=${1//[^[:alnum:][:space:]]}
)
完成此操作后,还需要更改另外两件事:
您需要实际输出清理后的值:
validateEntry () { echo "${1//[^[a[:alnum:][:space:]]}" }
您需要引用要验证的扩展,以便将整个内容传递给您的函数:
name=$(validateEntry "$1")
关于regex - 如何编写验证字母数字和空格的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31736956/