Regex 在Bash的正则表达式中添加下划线

Regex 在Bash的正则表达式中添加下划线,regex,bash,Regex,Bash,我正在尝试使用bash脚本验证数据库名称,如command.sh databaseName,并将给定的正则表达式作为参数 比如说 dataBaseNameIsValid data-BaseNameIsValid -dataBaseNameIsNotValid dataBaseNameIsNotValid- 以下代码正在运行: if [ -z $1 ]; then echo "No database name given" exit 1 fi DATABASENAME=$1

我正在尝试使用bash脚本验证数据库名称,如
command.sh databaseName
,并将给定的正则表达式作为参数

比如说

dataBaseNameIsValid
data-BaseNameIsValid
-dataBaseNameIsNotValid
dataBaseNameIsNotValid-
以下代码正在运行:

if [ -z $1 ]; then
    echo "No database name given"
    exit 1
fi

DATABASENAME=$1

# check the DATABASENAME is roughly valid!
DATABASE_PATTERN="^([[:alnum:]]([[:alnum:]\-]{0,61}[[:alnum:]]))$"

if [[ "$DATABASENAME" =~ $DATABASE_PATTERN ]]; then
    DATABASENAME=`echo $DATABASENAME | tr '[A-Z]' '[a-z]'`
    echo "DATABASENAME: " $DATABASENAME
else
    echo "invalid DATABASENAME"
    exit 1
fi
现在,我想将下划线
\uu
作为有效字符引入,我所做的是,在我的正则表达式中添加了
\u
分数,如下所示:

DATABASE_PATTERN="^([[:alnum:]]([[:alnum:]\-_]{0,61}[[:alnum:]]))$"
此返回
无效的数据库名

我在这里可能做错了什么?

破折号必须是最后一个(反斜杠在这里没有帮助)。只需在
-
之间切换顺序,即可获得定义良好的枚举

(破折号也可以是字符类中的第一个字符,也可以是被求反的字符类中紧跟在求反运算符之后的字符。)