Jea*_*ote 6 regex bash shell function
我正在编写一个清理用户输入的bash验证函数.
我们的想法是,如果脚本有3个参数,那么这些参数可能只是字母数字值.但是参数可以是用双引号括起来的多个单词,如下所示:
myfunction arg1 arg2 "this is arg3"
所以我基本上想要剥离所有不是字母数字或空格字符的东西.
目前,我有:
validateEntry() {
string=$1
clean=${string//[^a-zA-Z0-9\s]/}
}
但它似乎没有用.在myfunction arg1 arg2 "this is arg3",它is arg3被剥离了.
我使用此函数的方式是在脚本中,如下所示:
name=$(validateEntry $1)
Run Code Online (Sandbox Code Playgroud)
我需要帮助.
我的想法是validateEntry在一个脚本中使用该函数,可以使用3个参数,如下所示:
if [[ "$#" -eq 3 ]]; then
arg1=$(validateEntry $1)
arg2=$(validateEntry $2)
arg3=$(validateEntry $3)
echo "${arg1}, ${arg2}, ${arg3}."
fi
Run Code Online (Sandbox Code Playgroud)
但是如果我的脚本的第三个参数是this is arg3,$arg3减少到this,即使我直接调用我的函数,使用相同的三个参数,第三个参数是this is arg3
\s并不意味着模式中的"任何类型的空白"(这不是正则表达式).相反,要么只使用文字空间
clean=${1//[^a-zA-Z0-9 ]}
Run Code Online (Sandbox Code Playgroud)
或者,如果要匹配空格,制表符,换行符等,请使用POSIX字符类[:space:]:
clean=${1//[^a-zA-Z0-9[:space:]]}
Run Code Online (Sandbox Code Playgroud)
(就此而言,您也可以使用字母和数字的字符类:
clean=${1//[^[:alnum:][:space:]]}
Run Code Online (Sandbox Code Playgroud)
)
完成后,还有两件事需要改变:
您需要实际输出清理后的值:
validateEntry () {
echo "${1//[^[a[:alnum:][:space:]]}"
}
Run Code Online (Sandbox Code Playgroud)您需要引用要验证的扩展,以便将整个内容传递给您的函数:
name=$(validateEntry "$1")
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |