Regex 在Bash的正则表达式中添加下划线
我正在尝试使用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
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:]]))$"
此返回无效的数据库名
我在这里可能做错了什么?破折号必须是最后一个(反斜杠在这里没有帮助)。只需在-
和
之间切换顺序,即可获得定义良好的枚举
(破折号也可以是字符类中的第一个字符,也可以是被求反的字符类中紧跟在求反运算符之后的字符。)