如何在 Java 中检查字符串是否符合电子邮件格式

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何使用正则表达式在 Java 中验证给定的字符串是否符合标准的电子邮件格式。我们将定义一个合适的正则表达式模式,使用 Pattern.matches() 方法进行验证,并使用各种有效的和无效的电子邮件地址来测试我们的实现,以确保其正常工作。这个实践练习将让你获得使用 Java 正则表达式进行字符串模式匹配的实际经验。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/StringManipulationGroup -.-> java/strings("Strings") java/StringManipulationGroup -.-> java/regex("RegEx") java/SystemandDataProcessingGroup -.-> java/string_methods("String Methods") subgraph Lab Skills java/if_else -.-> lab-559994{{"如何在 Java 中检查字符串是否符合电子邮件格式"}} java/for_loop -.-> lab-559994{{"如何在 Java 中检查字符串是否符合电子邮件格式"}} java/strings -.-> lab-559994{{"如何在 Java 中检查字符串是否符合电子邮件格式"}} java/regex -.-> lab-559994{{"如何在 Java 中检查字符串是否符合电子邮件格式"}} java/string_methods -.-> lab-559994{{"如何在 Java 中检查字符串是否符合电子邮件格式"}} end

定义电子邮件正则表达式模式

在这一步中,我们将首先定义用于验证电子邮件地址的正则表达式模式。正则表达式,通常简称为“regex”或“regexp”,是定义搜索模式的字符序列。它们在字符串的模式匹配和操作方面非常强大。

对于电子邮件验证,正则表达式模式可以帮助我们检查给定的字符串是否遵循电子邮件地址的标准格式(例如,[email protected])。虽然为所有可能的有效电子邮件地址编写一个完美的正则表达式非常复杂,但我们可以定义一个涵盖大多数常见有效格式的模式。

我们将创建一个新的 Java 文件来存放代码。

  1. 如果 WebIDE 尚未打开,请打开它。默认情况下,你应该位于 ~/project 目录中。

  2. 在左侧的文件资源管理器中,在空白处右键单击,然后选择“新建文件”。将文件命名为 EmailValidator.java

  3. 在文件资源管理器中点击 EmailValidator.java 文件,在编辑器中打开它。

  4. 现在,让我们添加 Java 类的基本结构并定义正则表达式模式。将以下代码复制并粘贴到 EmailValidator.java 文件中:

    import java.util.regex.Pattern;
    
    public class EmailValidator {
    
        // Email regex pattern
        private static final String EMAIL_REGEX =
                "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
    
        public static void main(String[] args) {
            // We will add code here in the next steps
        }
    }

    让我们简要了解一下新添加的部分:

    • import java.util.regex.Pattern;:这行代码导入了 Pattern 类,它是 Java 内置正则表达式支持的一部分。
    • private static final String EMAIL_REGEX = "...";:这行代码声明了一个名为 EMAIL_REGEX 的常量变量,并将我们的正则表达式模式赋值给它。
      • ^:匹配字符串的开头。
      • [a-zA-Z0-9_+&*-]+:匹配一个或多个字母数字字符或 _+&*-。这用于匹配用户名部分。
      • (?:\\.[a-zA-Z0-9_+&*-]+)*:匹配零个或多个由点和更多用户名字符组成的序列。这允许用户名中包含点(例如,first.last)。
      • @:匹配字面的“@”符号。
      • (?:[a-zA-Z0-9-]+\\.)+:匹配一个或多个由字母数字字符或 - 后跟点组成的序列。这用于匹配域名(例如,domain.)。
      • [a-zA-Z]{2,7}:匹配 2 到 7 个字母字符,用于顶级域名(例如,comorg、国家代码)。
      • $:匹配字符串的结尾。

    如果正则表达式模式看起来很复杂,也不用担心。理解复杂正则表达式模式的每个细节需要时间和实践。目前,重点关注这个字符串定义了有效电子邮件地址的规则这一事实。

  5. 保存 EmailValidator.java 文件(Ctrl+S 或 Cmd+S)。

你现在已经成功创建了 Java 文件并定义了用于电子邮件验证的正则表达式模式。在下一步中,我们将使用这个模式来验证实际的电子邮件地址。

使用 Pattern.matches() 进行电子邮件验证

在这一步中,你将学习如何使用 Java 中的 Pattern.matches() 方法来检查给定的字符串是否与你定义的电子邮件正则表达式模式匹配。Pattern.matches(regex, input) 方法是一种方便的方式,用于将整个输入字符串与正则表达式进行简单匹配。如果整个输入字符串与正则表达式匹配,则返回 true,否则返回 false

你将在 EmailValidator 类中添加一个新方法来执行此验证。

  1. 如果 EmailValidator.java 文件尚未在 WebIDE 编辑器中打开,请打开它。

  2. EmailValidator 类内部,但在 main 方法外部添加以下方法:

    public static boolean isValidEmail(String email) {
        return Pattern.matches(EMAIL_REGEX, email);
    }

    让我们来看看这个新方法:

    • public static boolean isValidEmail(String email):这行代码声明了一个名为 isValidEmail 的新方法。
      • public:表示该方法可以从类外部访问。
      • static:表示该方法属于 EmailValidator 类本身,而不是该类的特定对象。你可以直接使用类名调用它(例如,EmailValidator.isValidEmail(...))。
      • boolean:表示该方法将返回一个布尔值(truefalse)。
      • (String email):指定该方法接受一个参数,一个名为 emailString 类型参数,即你要验证的电子邮件地址。
    • return Pattern.matches(EMAIL_REGEX, email);:这是该方法的核心。它调用 Pattern.matches() 方法,传入 EMAIL_REGEX 和输入的 email 字符串。此匹配的结果(truefalse)随后由 isValidEmail 方法返回。
  3. 现在,修改 main 方法以使用新的 isValidEmail 方法。将现有的 main 方法替换为以下代码:

    public static void main(String[] args) {
        String testEmail = "[email protected]";
        boolean isValid = isValidEmail(testEmail);
    
        if (isValid) {
            System.out.println(testEmail + " is a valid email address.");
        } else {
            System.out.println(testEmail + " is not a valid email address.");
        }
    }

    在这个更新后的 main 方法中:

    • String testEmail = "[email protected]";:你定义了一个用于测试的示例电子邮件地址。
    • boolean isValid = isValidEmail(testEmail);:你调用 isValidEmail 方法并传入 testEmail,然后将返回的布尔值存储在 isValid 变量中。
    • ifelse 代码块检查 isValid 的值,并打印一条消息,指示该电子邮件是否有效。
  4. 保存 EmailValidator.java 文件(Ctrl+S 或 Cmd+S)。

  5. 现在,编译更新后的程序。打开 WebIDE 底部的终端,并确保你位于 ~/project 目录中。运行以下命令:

    javac EmailValidator.java

    如果没有错误,则编译成功。

  6. 最后,使用 java 命令运行编译后的程序:

    java EmailValidator

    你应该会看到输出,指示测试电子邮件根据你定义的正则表达式模式是否有效。

    [email protected] is a valid email address.

你现在已经成功使用 Pattern.matches() 方法,根据你定义的正则表达式模式验证了一个电子邮件地址。在下一步中,你将使用不同的有效和无效电子邮件地址进行测试。

使用有效和无效的电子邮件进行测试

在这最后一步中,我们将使用几个有效和无效的电子邮件地址示例来测试 EmailValidator,以了解我们的正则表达式模式和 Pattern.matches() 方法如何处理它们。这将帮助我们理解验证逻辑的行为。

  1. 在 WebIDE 编辑器中打开 EmailValidator.java 文件。

  2. 修改 main 方法以测试多个电子邮件地址。将当前的 main 方法替换为以下代码:

    public static void main(String[] args) {
        String[] testEmails = {
            "[email protected]",       // Valid
            "[email protected]", // Valid
            "invalid-email",                // Invalid (missing @)
            "invalid@domain",               // Invalid (missing top-level domain)
            "invalid@domain.",              // Invalid (missing top-level domain)
            "[email protected]",             // Invalid (top-level domain too short)
            "[email protected]",      // Invalid (top-level domain too long)
            "@domain.com",                  // Invalid (missing username)
            "[email protected]"                     // Invalid (missing domain name)
        };
    
        for (String email : testEmails) {
            boolean isValid = isValidEmail(email);
    
            if (isValid) {
                System.out.println(email + " is a valid email address.");
            } else {
                System.out.println(email + " is not a valid email address.");
            }
        }
    }

    在这个更新后的 main 方法中:

    • 我们创建了一个名为 testEmails 的字符串数组,其中包含各种电子邮件地址,包括有效的和故意设置为无效的地址。
    • 我们使用 for 循环遍历 testEmails 数组中的每个电子邮件地址。
    • 在循环内部,对于每个 email,我们调用 isValidEmail 方法并打印结果,就像我们在上一步中所做的那样。
  3. 保存 EmailValidator.java 文件(Ctrl+S 或 Cmd+S)。

  4. 在终端中编译修改后的程序:

    javac EmailValidator.java

    确保没有编译错误。

  5. 运行编译后的程序:

    java EmailValidator

    观察输出。你应该会看到 testEmails 数组中的每个电子邮件地址都有一行输出,表明我们的验证器根据正则表达式模式是否认为它有效。

    [email protected] is a valid email address.
    [email protected] is a valid email address.
    invalid-email is not a valid email address.
    invalid@domain is not a valid email address.
    invalid@domain. is not a valid email address.
    [email protected] is not a valid email address.
    [email protected] is not a valid email address.
    @domain.com is not a valid email address.
    [email protected] is not a valid email address.

通过使用不同的输入进行测试,你可以看到正则表达式模式和 Pattern.matches() 方法如何协同工作来验证电子邮件地址。请记住,虽然这个正则表达式涵盖了许多常见情况,但根据严格标准验证所有可能的电子邮件格式可能要复杂得多。

你现在已经成功使用 Java 的正则表达式功能实现并测试了一个基本的电子邮件验证机制。

总结

在本次实验中,你首先搭建了 Java 环境,并创建了一个新文件 EmailValidator.java。接着,你定义了一个专门用于验证电子邮件地址的正则表达式模式(EMAIL_REGEX)。这个模式以常量字符串的形式存储,借助 Java 的 java.util.regex.Pattern 类实现了强大的字符串匹配功能。这一初始步骤为后续实现电子邮件验证逻辑奠定了基础。