使用正则表达式(带加号)执行if语句验证以捕获任何文件扩展名字符串

时间:2015-11-10 21:29:50

标签: regex bash validation if-statement

我一直在研究一个bash脚本,它将一个参数作为用户的输入。

我必须验证此输入是否(至少)有文件扩展名后缀[ex:'。com','.ca'等]并且在该后缀之前没有空名称。

我试图设置正则表达式验证并尝试设置正则表达式验证语句(其中$ 1是用户输入的内容):if [[ $1 =~ ^.+\.[A-z0-9]+$ ]]

我认为这个字符串能够匹配一个以至少1个字符开头的字符串,后跟一个文字点('。'),最后捕获至少一个字母或数字字符。

这是关于为任何好奇的人验证用户输入的完整代码。

domainName="";
    if [ $# -eq 1 ]; then
        if [[ $1 =~ ^.+\.[A-z0-9]+$ ]]; then
            domainName=$1;
            printf "The domain name is: \"%s\"\n" $domainName;
        else
            printf "The domain name needs at least a suffix (ex: '.com', '.ca', etc)\n";
        fi
    elif [ $# -le 0 ]; then
        printf "You need to give me a domain name to set up!\n";
        exit 1;
    else
        printf "You cannot have more than 1 domain set up at a time!\n";
        exit 1;
    fi

如果有人对正在发生的事情以及如何解决这个问题有任何想法,请分享您的知识:)

提前致谢!

1 个答案:

答案 0 :(得分:0)

问题是A-z在您的角色类[A-z0-9]中,它与ASCII表中的Az之间的更多字符相匹配,例如:[,{{ 1}},\等。

使用此:

]

甚至更好:

[[ $1 =~ ^.+\.[A-Za-z0-9]+$ ]]