java如何检查该行是否与正则表达式(regex)冲突?
抱歉,如果这是重复的,我没有发现类似的问题,可能我遗漏了什么
我将举例说明我想要什么:
假设我们有一个用于检查电子邮件的简单正则表达式
private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
我开始一个符号一个符号地输入(在一些输入字段中)email(或者不是email,而是一些字符串),并按regex检查整行
- 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
换句话说,我想通过正则表达式检查字符串,如果有可能附加符号将给出正确的字符串,则得到肯定的结果
# 1 楼答案
您可以使用
util
包中的regex.Pattern
和regex.Matcher
类比较http://www.tutorialspoint.com/java/java_regular_expressions.htm和Java Regex Capturing Groups
然后,您可以检查不同的组,只要有一个组不匹配,但后面的组确实匹配,您的案例中就不再可能有有效的输入(仅通过添加)
为了使其适用于您的示例,您可以调用一个
validate
函数,该函数在每个enter事件(例如按键按下事件)上实现上述代码。但这取决于您的UI框架# 2 楼答案
第一件事第一
你的E-Mail Regex是wrong
仅根据地址的外观就很难验证电子邮件。。。大多数时候人们只是做错了。你也是。对不起
这不是关于正则表达式,而是关于用户体验
您最好允许用户输入他们想要的任何内容,并告诉他们他们的电子邮件是否可能被错误键入,而不是首先阻止用户输入
至于输入时的验证
如果您仍然希望使用正则表达式运行,只需将后面的部分设置为可选部分,这样不完整的部分就可以与正则表达式匹配
https://regex101.com/r/zO6nM7/1
# 3 楼答案
您可以在这里使用
?
。这是使前面的符号可选的符号。你的例子很糟糕,因为电子邮件不应该通过正则表达式验证,所以我将使用其他方法假设您想要匹配以下内容
所以你可以使用正则表达式,比如
下面的组称为非捕获组。您可以使用捕获组,但由于性能原因,您不应该使用,因为您不需要捕获的内容
外植体
基本上,我所做的是去决定我最初的规范中的字符串是什么
然后我把每一部分分成一个单独的正则表达式,让它成为可选的,这样我的正则表达式基本上就是
以上不是充分的证据。它可能会给出误报,但如果问题是附加是否可能给出正确的结果,并且您不需要绝对值,那么您可以使用这种方法
为了获得更好的结果,即绝对正确的结果,您可以使用lookbehinds。但请注意,这可能会变得复杂。但是,如果你正在寻找一些简单的东西,这是可行的