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

标签 regex bash function shell

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

)

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

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

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

    name=$(validateEntry "$1")
    

关于regex - 如何编写验证字母数字和空格的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31736956/

相关文章:

javascript - .net 与 JS 正则表达式问题

python - 无法使用 child.before 获取数据

python - 覆盖内置函数

c - 函数指针 - 为什么这段代码会崩溃?

regex - 电话号码的最佳正则表达式是什么?

Java 使用正则表达式

php - 用PHP线程打开文件

linux - Incrond 监控 NFS 挂载?

python - 使用来自终端的参数调试 python 脚本

javascript - 从 Div 获取图像文件名并复制到按钮悬停时的文本字段中