【问题标题】:How to write a regex that validates alpha-numerics and spaces如何编写验证字母数字和空格的正则表达式
【发布时间】:2015-07-31 01:58:14
【问题描述】:

我正在编写一个清理用户输入的 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)

我需要这方面的帮助。

编辑:

我们的想法是在一个脚本中使用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

【问题讨论】:

    标签: regex bash function shell


    【解决方案1】:

    \s 并不意味着模式中的“任何类型的空白”(它不是正则表达式)。相反,要么只使用文字空间

    clean=${1//[^a-zA-Z0-9 ]}
    

    或者,如果您想匹配空格、制表符、换行符等,请使用 POSIX 字符类[:space:]

    clean=${1//[^a-zA-Z0-9[:space:]]}
    

    (就此而言,您也可以对字母和数字使用字符类:

    clean=${1//[^[:alnum:][:space:]]}
    

    )

    完成此操作后,您还需要更改另外两件事:

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

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

      name=$(validateEntry "$1")
      

    【讨论】:

    • 我可能需要注意我在 OSX 上运行 bash。您的三个解决方案似乎都不起作用。
    • 如果双引号参数之一中有特殊字符(即!@#%$),shell不会扩展参数并抛出错误吗?
    • 这就是我使用它的方式:validateEntry "This is my entry" -bash: [[: This is my entry: syntax error in expression (error token is "is my entry")
    • @shellter 我的哀悼! :)
    【解决方案2】:

    已编辑以匹配问题。

    function validateEntry {
        echo ${1//[^[:alnum:][:space:]]/}
    }
    
    
    if [[ $# -eq 3 ]]; then
        echo $(validateEntry "$1")
        echo $(validateEntry "$2")
        echo $(validateEntry "$3")
    fi
    

    命令

    ./test.sh arg1 arg2 "this is arg3"
    

    输出:

    arg1
    arg2
    this is arg3
    

    【讨论】:

    • 我已经更新了我的答案。输出对我来说似乎很好。您需要正确使用引号。
    • 确实,这都是关于引号的。谢谢!
    猜你喜欢
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多