首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中,是否可以同时使用字母和数值来验证用户输入?

在Java中,是否可以同时使用字母和数值来验证用户输入?
EN

Stack Overflow用户
提问于 2017-11-12 13:48:34
回答 1查看 61关注 0票数 0

例如,我希望员工输入员工ID。ID的格式为ANN-NNN。"A“是字母,"N”是数字。我想验证输入的第一个空格有一个字母,然后是0-9个数字。我知道如何验证alpha和如何验证int,但不是在相同的数字输入中。有什么想法吗?下面是我验证输入的第一个空格中的字母的方法:

代码语言:javascript
复制
Scanner sc = new Scanner(System.in);
System.out.println("Please enter letters:");
while (!sc.hasNext("[A-Za-z]+")) {
    System.out.println("Nope, that's not it!");
    sc.next();
}
String word = sc.next();
System.out.println("Thank you! Got " + word);
EN

回答 1

Stack Overflow用户

发布于 2017-11-12 14:00:56

正如amihelpful评论的那样,将您的regex更改为:

代码语言:javascript
复制
sc.hasNext("[A-Za-z][0-9]{2}[-][0-9]{3}")

这本质上意味着“任何A到Z字符的上限或下限,然后是0-9 {2}次,然后是连字符,然后是0-9 {3}次。有很多方法可以做到这一点,但我想说的是,当使用正则表达式时,您可能会考虑:

  • 如果您希望正则表达式覆盖整个输入,请以^开头并以$

结尾

  • 使用预定义的字符类可能会使

更整洁

因此,你可以这样说:

代码语言:javascript
复制
sc.hasNext("^[A-Za-z]\\d\\d-\\d\\d\\d$")

不使用^和$有时可能会给您带来麻烦,因为如果用户输入一个包含有效字符串的无效字符串,正则表达式匹配仍将通过,例如,AA11-2222将通过上面的第一个正则表达式匹配,而不是第二个。

您是否认为\d比0-9更容易阅读是我个人的事情,但我经常使用c#,它允许我们使用@“像这样\d”声明字符串,所以我们不需要转义每个\,我发现这更具可读性

我进一步建议您更改提示文本,因为它会告诉用户仅输入字母。我建议您使您的错误消息更具信息性。一条好的错误消息告诉用户哪里出了问题,以及他们可以做些什么来自己修复它。如果你曾经在uni之后的支持部门工作过,当你今天第一百次说"error 99意味着你没有填写姓氏“时,你会希望这句咒语被更多地遵循。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47245905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档