【发布时间】:2020-08-11 02:51:49
【问题描述】:
我正在尝试为课程做一个基本项目,但我遇到了一个问题。验证代码时,输入“test@test.com”时会起作用。但是,当进一步测试并输入“test@test.com.com”时,它仍然返回有效。代码如下:
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);
它的功能就像它应该的那样,减去知道将“test@test.com.com”或任何其他类似的电子邮件格式标记为无效。建议将不胜感激!
编辑:我将添加我收到的说明和反馈。
说明:电子邮件地址包含@ 字符。编写一个程序,询问用户输入的电子邮件地址并确定它是否是有效地址。这是基于 @ 字符的存在和字符串中没有空格。您无需担心输入单词中的任何其他字符。输出结果“The word IS an email address”或“The word IS NOT an email address”
示例 - 输入:testuser@mydomain.com 输出:单词是一个电子邮件地址
输入:my123user 输出:这个词不是电子邮件地址
我的反馈:
程序错误地将 test@test.com.com 识别为有效电子邮件。 代码格式不正确,缩进不正确。请确保您的代码使用每组新的大括号(表示范围)正确缩进。
【问题讨论】:
-
但这可能是一个有效的域。好的,
com.com可能不是它自己,但你可以有子域,所以email@subdomain.maindomain.tld是一个有效的构造。 -
这能回答你的问题吗? Java regex email
-
@JGNI 是的。我不认为这是一个很好的任务。特别是因为它故意误导人们什么是有效的。
-
我同意 VLAZ。提到的地址是有效的。您应该定义基于正则表达式的验证的目的。在我看来,电子邮件地址验证不应该比
\S+@\S+更复杂。这只会给出用户混淆输入字段的反馈。如果用户不想提供他的电子邮件地址,他会在最后提供 test@example.com(或更糟:一个随机地址)。这就是为什么人们通常必须证明他们可以接收到给定地址的电子邮件。 -
@ccalex 询问您的教授,如果 john@example.co.uk 是有效的电子邮件地址
标签: java regex validation java.util.scanner email-validation