抱歉,如果这是重复的,我没有找到类似的问题,也许我错过了一些东西......
我将通过示例解释我想要的内容:
假设我们有一个简单的正则表达式来检查电子邮件
私有(private)静态最终字符串 EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za -z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
我开始(在某些输入字段中)输入电子邮件(或不是电子邮件,而是一些字符串)一个符号一个符号地输入,并通过正则表达式检查整行。
- Enter: u
- Line: u
- Check:
true \\ because there is a chance that I will enter right symbols further
- Enter: s
- Line: us
- Check:
true
...
- Enter: @
- Line: username@
- Check:
true
- Enter: @
- Line: username@@
- Check:
false \\ because there is no way to get correct line appending any symbols
- Enter: d
- Line: username@d
- Check:
true
- Enter: .
- Line: username@domain.
- Check:
true
- Enter: .
- Line: username@domain..
- Check:
false
换句话说,我想通过正则表达式检查字符串,并在附加符号有可能为我们提供正确的字符串时获得肯定的结果。
最佳答案
首先要做的事情...
您的E-Mail Regex是 wrong
仅仅根据地址的外观来验证电子邮件是极其困难的……大多数时候人们只是做错了。你也是。抱歉。
这实际上并不是关于正则表达式,而是关于用户体验......
您最好允许用户输入他们想要的任何内容,并告诉他们他们的电子邮件是否可能输入错误,而不是阻止用户首先输入它。
关于输入时验证
如果您仍然想使用正则表达式运行,只需将后面的部分设为可选,这样不完整的部分就已经与正则表达式匹配了。
https://regex101.com/r/zO6nM7/1
/^[_a-z0-9-\+.-]+(\.[_a-z0-9-]+)*@?([a-z0-9+\-]+\.)*[a-z0-9+\-]*$/i
关于java - 如何检查该行与正则表达式(regex)不矛盾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34199145/