如何使用bash脚本验证电子邮件ID?

时间:2017-12-28 21:43:26

标签: regex linux bash email unix

我从随机网站获得了下面的bash脚本进行电子邮件验证,它工作正常,但我需要知道它是如何工作的?

我非常感谢为此做出明确的解释。

特别是“[a-zA-Z0-9 ._%+ - ] + @ [a-zA-Z0-9 .-] +。[a-zA-Z] {2,4}”

#!/bin/sh
while true; do
read -p "Enter Email ID: " to_recipient
if [[ "$to_recipient" =~ [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4} ]]
then
    break;
else
    echo "Please enter a valid email address"
fi
done

再次感谢!

1 个答案:

答案 0 :(得分:1)

简短版本是这是一个正则表达式匹配评估=~。长话以来,你需要学习正则表达式的语法才能理解它。

以下是您提供的特定正则表达式的简短说明:

在正则表达式中,[ ]分隔'字符类'它们将匹配类中的任何字符。在字符类定义中,您可以使用-指定字符范围。因此,在第一个:[a-zA-Z0-9._%+-],这是一类字符,可以是任何小写字母,任何大写字母,任意数字,或.%,{{1 },或+。然后,该类外部的-是Kleene Plus,它表示前一个表达式中的一个或多个(在本例中为字符类)。然后下一位是+符号,应该是自解释的。最后两个类应该匹配一个域名,他们在SLD部分使用字母数字和@.,然后在TLD部分他们只允许2-4 alpha只有字符(-语法表示前一个表达式的匹配数的下限和上限)。我在此注意到,这与现在完全有效的较长TLD不匹配:{N,M}等。

要使用完整的电子邮件RFC实际匹配电子邮件地址,它实际上比您在此处更复杂。

了解更多信息:

  1. https://en.wikipedia.org/wiki/Kleene_plus
  2. https://en.wikipedia.org/wiki/Regular_expression
  3. https://www.ietf.org/rfc/rfc0822.txt?number=822
  4. 我希望这会有所帮助。