例如,我希望员工输入员工ID。ID的格式为ANN-NNN。"A“是字母,"N”是数字。我想验证输入的第一个空格有一个字母,然后是0-9个数字。我知道如何验证alpha和如何验证int,但不是在相同的数字输入中。有什么想法吗?下面是我验证输入的第一个空格中的字母的方法:
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);发布于 2017-11-12 14:00:56
正如amihelpful评论的那样,将您的regex更改为:
sc.hasNext("[A-Za-z][0-9]{2}[-][0-9]{3}")这本质上意味着“任何A到Z字符的上限或下限,然后是0-9 {2}次,然后是连字符,然后是0-9 {3}次。有很多方法可以做到这一点,但我想说的是,当使用正则表达式时,您可能会考虑:
结尾
更整洁
因此,你可以这样说:
sc.hasNext("^[A-Za-z]\\d\\d-\\d\\d\\d$")不使用^和$有时可能会给您带来麻烦,因为如果用户输入一个包含有效字符串的无效字符串,正则表达式匹配仍将通过,例如,AA11-2222将通过上面的第一个正则表达式匹配,而不是第二个。
您是否认为\d比0-9更容易阅读是我个人的事情,但我经常使用c#,它允许我们使用@“像这样\d”声明字符串,所以我们不需要转义每个\,我发现这更具可读性
我进一步建议您更改提示文本,因为它会告诉用户仅输入字母。我建议您使您的错误消息更具信息性。一条好的错误消息告诉用户哪里出了问题,以及他们可以做些什么来自己修复它。如果你曾经在uni之后的支持部门工作过,当你今天第一百次说"error 99意味着你没有填写姓氏“时,你会希望这句咒语被更多地遵循。
https://stackoverflow.com/questions/47245905
复制相似问题