我怎样才能在gmail地址中做到这一点,不能是两个或更多"."(点)?



我必须在我的if子句中写一些东西,但我不知道怎么写。例如,"hello..hello@gmail.com"或"hello.hello.hello@gmail.com"应该是无效的输入,但"hello.hello@gmail.com"应该是有效的。

read -p  "enter email " email;
if [[ "$email" =~ ^[A-Za-z]+[A-Za-z0-9_%+-]+[A-Za-z]+@[A-Za-z]+[A-Za-$
echo "Email address $email is valid."//my if clause, which checks if there is correct gmail
else 
echo "Email address $email is invalid."
fi

您可以使用此表达式:

^[A-Za-z][A-Za-z0-9_%+-]+(.[A-Za-z0-9_%+-]+)?@[A-Za-z]+(.[A-Za-z]+)+$

关键思想:

  • .允许一个点
  • (...)?说带点的组是可选的,所以没有点也可以
  • 最大限度地减少解析同一字符串的不同方式的数量,以提高效率
  • 我假设域可以有多个点,但您也可以使用'...@[A-Za-z]+。[A-Za-z]+$ 允许域中只有一个点。