基本上我有一个电子邮箱,它只允许在电子邮箱中包含字符,但可以为空,问题是当该框为空时它会弹出我创建的错误
电子邮箱包含不允许的字符
tbl_worklog
只要我知道我的允许列表中没有空字符,那么你能告诉我如何允许该空格也是空的吗?
并且告诉我是否有电子邮件中允许的所有字符。
答案 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代码中;但是,在将数据实际提交到数据库之前,您可能希望确保用户名确实有效。在那里,你不想要允许空的用户名;最好尽可能多地重用逻辑,以避免不一致:在那里使用正则表达式的+
形式是合适的。