我尝试对NRIC进行验证。它仅在第一个和最后一个字符为字母且NRIC的长度为9时有效。例如,S1234567G。
当用户输入错误的格式时,会弹出错误的格式信息,例如S123D和S12345678G。这是我的代码。
boolean isLetter = true;
} else if (nric.equals("")) {
JOptionPane.showMessageDialog(null, "Please enter NRIC");
} else if (isLetter == false) {
for (int count = 0; count < nric.length(); count++) {
char i = nric.charAt(count);
if ((i != 9) && (!Character.isLetter(nric.charAt(0)))
&& (!Character.isLetter(nric.length() - 1)))
isLetter = false;
}
if (isLetter == false) {
JOptionPane.showMessageDialog(null, "NRIC wrong format");
}
这不是整个代码。我还有其他文本字段的其他验证。我刚刚分开了NRIC部分,因为我知道这里有一些错误。
无论我输入什么内容,它都会在我的数据库中创建一条记录。即使格式错误,它也不会显示错误消息。有人可以帮我查一下吗?提前谢谢。
答案 0 :(得分:1)
您可以使用matches
的正则表达式,例如
nric.matches("\\p{Alpha}.{7}\\p{Alpha}")
根据您的示例,您似乎只想考虑以大写字母开头的有效字符串,后跟七位数字,以另一个大写字母结尾,在这种情况下您将使用
nric.matches("\\p{Upper}\\d{7}\\p{Upper}")
(回想一下,在正则表达式中X{n}
表示X
重复n
次。)
答案 1 :(得分:1)
我认为这意味着任何类型的大写ASCII字母,而不是任何类型的字母,例如த
会通过Character.isLetter
。
最简单的方法是使用像[A-Z][0-9]{7}[A-Z]