如何在java中使用正则表达式允许空字符串?

时间:2016-09-04 08:47:29

标签: java regex

基本上我有一个电子邮箱,它只允许在电子邮箱中包含字符,但可以为空,问题是当该框为空时它会弹出我创建的错误

  

电子邮箱包含不允许的字符

tbl_worklog

只要我知道我的允许列表中没有空字符,那么你能告诉我如何允许该空格也是空的吗?

并且告诉我是否有电子邮件中允许的所有字符。

1 个答案:

答案 0 :(得分:4)

最简单的解决方案是将量词更改为*

"[a-zA-Z0-9-~!_#(@).]*"
                     ^ zero or more

您目前正在使用+,这需要一个或多个匹配。

@TheLostMind建议使用*效率低下,在使用正则表达式检查有效字符之前,应首先检查null和空输入。

虽然我同意这样做会更有效率,但我认为效率是次要原因:如果您在代码中的意图是仅在用户输入字符串时检查字符串的内容,最好以这种方式构建它:

if (UserName != null && !UserName.isEmpty()) {  // Or use your favorite library.
  // The user has entered a value: check that it is valid.
  if (!UserName.matches("[a-zA-Z0-9-~!_#(@).]+")) {
    PopMyError();
  }
}

与说"空用户名有效"略有不同,这是正则表达式"[a-zA-Z0-9-~!_#(@).]*"传达的内容。

(当然,我们可以通过预编译模式来生成Pattern对象,然后在条件中调用pattern.matcher(UserName).matches()来提高效率。

预检查空/空字符串的另一个好处是,您可以重复使用相同的正则表达式来验证代码的其他部分,而想要允许这样做用户名。

我猜测上述逻辑将用于某些用户仍在输入数据的UI代码中;但是,在将数据实际提交到数据库之前,您可能希望确保用户名确实有效。在那里,你想要允许空的用户名;最好尽可能多地重用逻辑,以避免不一致:在那里使用正则表达式的+形式是合适的。