【问题标题】:Java: Parsing for empty spaces using Pattern and MatcherJava:使用 Pattern 和 Matcher 解析空格
【发布时间】:2010-12-29 04:05:58
【问题描述】:

我有一个带有编辑框的表单,用于输入有效的电子邮件地址。我不希望用户在电子邮件 ID 编辑框中输入空格。输入文本后,我会调用两个函数

isEmailValid(String s) || isLoginValid(String s)
isEmailValid(String s){
    Pattern pattern = Pattern.compile("^[\\.\\w-]*(@[\\.\\w-]*)?$");
    Matcher matcher = pattern.matcher(string);
    return matcher.matches();
}

isLoginValid(String s){
    Pattern pattern = Pattern.compile("^\\w+$");
    Matcher matcher = pattern.matcher(string);
    return matcher.matches();
}

当用户第一次输入电子邮件 ID 时,此模式可以正常工作。但是一旦用户删除一个字符并输入一个空格,这个逻辑就中断了。我不希望用户输入空格作为电子邮件 ID。

谁能帮忙指出我哪里出错了?

【问题讨论】:

  • SpunkerBaba:尝试打印出两个函数的输出。另外我认为你应该使用 isEmailValid(String s) && isLoginValid(String s)。

标签: java regex pattern-matching


【解决方案1】:

我不是 100% 确定,但它是否可能匹配电子邮件,因为它匹配您的字符串,因为大多数内容都是零次或多次?其次是可能发生零次或多次的事情。也许尝试类似:

Pattern pattern = Pattern.compile("^[\\w]+[\\.\\w-]*(@[\\w-]+\\.[\\w-]+)?$");

我不确定这是否会有所帮助。 此外,您可能希望两者都必须有效,但也许不是。如果您愿意,值得考虑:

isEmailValid(String s) && isLoginValid(String s)

代替:

isEmailValid(String s) || isLoginValid(String s)

但也有可能(并且可能是合乎逻辑的)您的意思是您所写的。只是一个建议。

【讨论】:

  • 抱歉回复晚了。解决了我的问题,但引入了一个新问题。一旦我输入“@”匹配器返回 false,我的目的就失败了。
  • 已解决。 isEmailValid(String s) || isLoginValid(String s) 以及您建议的 Pattern 就像魅力一样。你的回答被接受:)
  • @SpunkerBaba 好交易!很高兴为您提供帮助!
【解决方案2】:

regexp 不是通用匹配器。解决您的任务的最简单方法是对空字符串进行额外检查:

 if (org.apache.commons.lang.StringUtils.isBlank(email)) {
    return false;
 }

【讨论】:

  • 这可能会容易得多。我敢说在我回答之前试试这个。
  • 根据StringUtils.isBlank() javadoc:Checks if a String is whitespace, empty ("") or null.。这与检查if((email == null) || (email.trim().length() == 0)) 基本相同。也可以代替if (org.apache.commons.lang.StringUtils.isBlank(email)) return false; } 写成return !org.apache.commons.lang.StringUtils.isBlank(email);
猜你喜欢
  • 1970-01-01
  • 2014-09-08
  • 2011-09-24
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 2012-03-24
  • 1970-01-01
相关资源
最近更新 更多