如何编写一个验证字母数字和空格的正则表达式

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

che*_*ner 5

\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)

)

完成后,还有两件事需要改变:

  1. 您需要实际输出清理后的值:

    validateEntry () {
       echo "${1//[^[a[:alnum:][:space:]]}"
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您需要引用要验证的扩展,以便将整个内容传递给您的函数:

    name=$(validateEntry "$1")
    
    Run Code Online (Sandbox Code Playgroud)