Java 中的正则表达式电子邮件验证问题
Posted
技术标签:
【中文标题】Java 中的正则表达式电子邮件验证问题【英文标题】:Issues with Regex Email Validation in Java 【发布时间】: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 是有效的电子邮件地址
【参考方案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)$";
【讨论】:
这也将允许email@domain.com.com
这与 rfc 不匹配,但它与教授错误地调用无效电子邮件地址的内容匹配
我看不出这与“test@test.com.com”不匹配。 test
匹配 [a-zA-Z0-9_!#$%&'*+/=?``|~^.-]+
。 @ 火柴 @。 test.com.com
匹配 [a-zA-Z0-9.-]+
就好了。所以:与问题中提供的正则表达式相同的问题。
我尝试了正则表达式,但它仍然没有消除 email@domain.com.com 当它意味着“无效”时它仍然返回“有效”。
现在也不会匹配test@abc.net
以上是关于Java 中的正则表达式电子邮件验证问题的主要内容,如果未能解决你的问题,请参考以下文章