我尝试验证任何域名,但似乎无法匹配。不明白为什么语法看起来不错,我也验证了这个正则表达式https://rubular.com/r/QmX59URV8D 它运行良好。
这是我的代码
#!/bin/bash
read -p "Enter a domain name: " domain
# Validate domain name
validate="(?=^.{5,254}$)(^(?:(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$)"
# If user doesn't enter anything
if [ -e $domain ]; then
echo "You must enter a domain"
fi
if [[ $domain =~ $validate ]]; then
echo "Valide $domain name."
else
echo "Not valid $domain name."
fi
答案1
首先,您需要使用与 Bash 兼容的正则表达式,而不是 Ruby 正则表达式,正如评论中所提到的。
接下来使用=~
比较运算符,您需要使用双括号[[
而]]
不是单括号。
并且正如评论中提到的那样,用于-z
检查读入的变量是否为空。
就像是:
#!/bin/bash
read -p "Enter a domain name: " domain
# Validate domain name
validate="^([a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]\.)+[a-zA-Z]{2,}$"
# If user doesn't enter anything
if [[ -z "$domain" ]]; then
echo "You must enter a domain"
fi
if [[ "$domain" =~ $validate ]]; then
echo "Valid $domain name."
else
echo "Not valid $domain name."
fi
应该可以帮你开始了。