我试图验证用户输入的子域是否有效,但是不管我传入什么,它都是无效的。我知道regex是可以的,所以问题是我的"if“逻辑,但是我对shell/bash还不熟悉。
#!/bin/bash
#
echo Enter the subdomain\'s name to configure.
read SUBDOMAIN
if [[ ! $SUBDOMAIN =~ [A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])? ]]; then
echo "$SUBDOMAIN is not a valid domain"
fi示例:将被接受(常规子域名):测试不会被接受(无效子域名):-将不被接受(无效子域名):(空)不会被接受(无效子域名):#$??&@#&?$##$
我更喜欢使用shell,但是regex中的括号使脚本抛出一个错误。
我不确定是否可以用grep来完成它,但是我从来不知道如何使用grep,它总是让我感到困惑。
发布于 2018-04-30 16:16:21
如果您试图匹配“字母数字”和“字母数字或破折号”,确保末尾没有破折号,这样总共有1..62个字符,这个RE将适用于您。
^[[:alnum:]](([[:alnum:]]|-){0,61}[[:alnum:]])?$这将绑定到字符串的开头和结尾,因此RE必须完全匹配字符串。
^[[:alnum:]](.),以?结尾) [[:alnum:]]或短跑-,重复0..60次[[:alnum:]]$正如在这个答案下的注释中所建议的那样,我应该指出,[[:alnum:]]范围受到当前区域设置的影响。如果要确保它只匹配"ASCII“and、and和0-9,则需要确保它与LANG=C一起运行。否则,您可能会发现更多的字符被接受,如áéfind和其他字符。
https://unix.stackexchange.com/questions/440943
复制相似问题