Java 中的正则表达式电子邮件验证问题

Issues with Regex Email Validation in Java

提问人:ccalex 提问时间:4/27/2020 最后编辑:ccalex 更新时间:4/27/2020 访问量:567

问:

我正在尝试为课堂做一个基本项目,但我遇到了一个问题。验证代码时,当输入“[email protected]”时,它会起作用。但是,当进一步测试并输入输入“[email protected]”时,它仍然返回有效。代码如下:

  System.out.println("Enter a valid email address: ");
  Scanner scan = new Scanner(System.in);
  emailAddress = scan.next();
  String email_regex = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
    + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
  testString = emailAddress;
  b = testString.matches(email_regex);

  if (b) 
  {
    System.out.println("The email address \"" + emailAddress + "\" is valid.");
  }
  else 
  {
    System.out.println("The email address \"" + emailAddress + "\" IS NOT valid.");
  }
} while (!b);

它的功能就像它应该的那样,除了知道将“[email protected]”或任何其他类似的电子邮件格式标记为无效。建议将不胜感激!

编辑:我将添加我收到的说明和反馈。

说明:电子邮件地址包含 @ 字符。编写一个程序,要求用户输入电子邮件地址,并确定它是否是有效地址。这是基于 @ 字符的存在,并且字符串中没有空格。您无需担心输入字中的任何其他字符。输出结果“The word IS an email address”或“The word IS IS NOT an email address”

例- 输入:[email protected] 输出:单词 IS 电子邮件地址

输入:my123user 输出:单词 IS 不是电子邮件地址

我的反馈:

程序错误地将 [email protected] 识别为有效的电子邮件。 代码格式不正确,缩进不正确。请确保您的代码使用每组新的大括号(表示范围)正确缩进。

Java 正则表达 java.util.scanner 电子邮件验证

评论

0赞 VLAZ 4/27/2020
但这可能是一个有效的域名。好的,可能不是它本身,但你可以有子域,所以是一个有效的结构。com.com[email protected]
0赞 Arvind Kumar Avinash 4/27/2020
这回答了你的问题吗?Java 正则表达式电子邮件
1赞 VLAZ 4/27/2020
@JGNI是的。我不认为这是一项非常好的任务。特别是因为它故意误导人们了解什么是有效的。
1赞 steffen 4/27/2020
我同意 VLAZ。上述地址有效。您应该定义基于正则表达式的验证的目的。在我看来,电子邮件地址验证不应该比 更复杂。这只会给出用户混淆输入字段的反馈。如果用户不想提供他的电子邮件地址,他最终会提供 [email protected](或者更糟的是:随机地址)。这就是为什么人们通常必须证明他们可以收到发送到给定地址的电子邮件。\S+@\S+
1赞 JGNI 4/27/2020
@ccalex问问你的教授,[email protected]是否是一个有效的电子邮件地址

答:

-1赞 QuickSilver 4/27/2020 #1

试试下面的正则表达式,它对我有用

String email_regex = "^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]{1}|[\\w-]{2,}))@"
                + "[A-Za-z0-9-]+(\\.com|abc\\.co|abc\\.nz|abc\\.org|abc\\.net)$";

评论

0赞 VLAZ 4/27/2020
这也将允许[email protected]
0赞 JGNI 4/27/2020
这与 rfc 的不匹配,但它确实与教授错误地调用无效电子邮件地址的内容相匹配
0赞 Johannes H. 4/27/2020
我不明白这与“[email protected]”不匹配。 比赛。@ 匹配 @。 匹配刚刚好。所以:与问题中提供的正则表达式相同的问题。test[a-zA-Z0-9_!#$%&'*+/=?``{|}~^.-]+test.com.com[a-zA-Z0-9.-]+
0赞 ccalex 4/27/2020
我尝试了正则表达式,但它仍然没有消除 [email protected] 当它本应为“无效”时,它仍然返回为“有效”。
1赞 Johannes H. 4/27/2020
现在它也不会匹配[email protected]