【问题标题】:How to get a regular expression checking result if false? [duplicate]如果为假,如何获得正则表达式检查结果? [复制]
【发布时间】:2013-05-14 16:51:32
【问题描述】:

我有一个正则表达式来检查字符串是否为电子邮件格式,如下所示:

Pattern p = Pattern.compile("^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@ + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");

正确的电子邮件格式是xxx.xxx@xxx.com

但有时我的用户抱怨由于电子邮件格式无效,他们无法从应用程序发送电子邮件。

使用Matcher m = p.matcher(email);时,如何找出哪个单词/字符与正则表达式不匹配?

【问题讨论】:

  • 第一步:您可能会询问用户哪个输入无效。
  • 您的代码中存在引用错误。你能解决这个问题吗?
  • 您有电子邮件地址。如果不匹配,请将其记录为错误/警告,并在您的日志中查找。

标签: java regex email


【解决方案1】:

使用

string.replaceAll

像这样:

class Test {
  public static void main(String[] args) {
    String str = "word <a href=\"word\">word</word>word word";
    str = str.replaceAll("word(?!([^<]+)?>)", "repl");
    System.out.println(str);
  }
}

那么不替换的字符串就是你想要的

【讨论】:

  • 您确定您回答的问题正确吗?我在这里看不到连接。
  • 把你的模式放在替换函数的第一部分,在第二部分写一个单词。逐部分更改您的检查模式,您会发现问题
【解决方案2】:

这是不可能的。

一个正则表达式失败或成功,它不能部分成功,如果它失败,正则表达式引擎通常不会让您访问精确的失败点。

对我来说更突出的问题是您依赖正则表达式来验证电子邮件地址。这永远不会奏效,因为电子邮件地址可能非常复杂。

做一个非常基本的检查会更有意义,即。 e.检查"^.+@.+",然后使用解析器进行适当的验证,并使用带有验证码的测试邮件发送到该地址。无论如何,您都需要这样做,因为当然,并非每个有效地址实际上都指向现有邮箱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多