基本上我有一个电子邮件框,它只应该包含电子邮件框中允许的字符,但可以为空,问题是当框为空时,它会弹出我创建的错误说
邮箱包含不允许的字符
String UcharSet = "[a-zA-Z0-9-~!_#(@).]+";
boolean UMORN = UserName.matches(UcharSet);
if(!UMORN)
PopMyError();
Run Code Online (Sandbox Code Playgroud)
只要我知道我的允许列表中没有空字符,那么您能告诉我如何允许该框也可以为空吗?
并告诉我是否获得了电子邮件中允许的所有字符。
最简单的解决方案是将量词更改为*:
"[a-zA-Z0-9-~!_#(@).]*"
^ zero or more
Run Code Online (Sandbox Code Playgroud)
您当前正在使用+,这需要一个或多个匹配项。
@TheLostMind 建议使用*效率低下,在使用正则表达式检查有效字符之前,您应该先检查空输入和空输入。
虽然我同意这样做会更有效率,但我认为效率是这里的次要原因:如果您在代码中的意图是仅在用户输入字符串时检查字符串的内容,那么结构化会更好它以这种方式:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
这与 regex 所传达的“空用户名有效”的说法略有不同"[a-zA-Z0-9-~!_#(@).]*"。
(当然,我们可以通过预编译模式来创建一个Pattern对象,然后调用pattern.matcher(UserName).matches()条件来提高效率)。
抽查预空/空字符串的另一个好处是,你可以重复使用相同的正则表达式在你的代码的其他部分,在那里你验证不希望允许这样的用户名。
我猜上面的逻辑是用在一些UI代码中,用户还在输入数据的地方;不过,您可能希望在实际将数据提交到数据库之前确保用户名确实有效。在那里,你不希望允许空的用户名; 最好重用尽可能多的逻辑,以避免不一致:在+那里使用正则表达式的形式是合适的。
| 归档时间: |
|
| 查看次数: |
3765 次 |
| 最近记录: |