验证NRIC

时间:2012-12-22 10:20:44

标签: java

我尝试对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部分,因为我知道这里有一些错误。

无论我输入什么内容,它都会在我的数据库中创建一条记录。即使格式错误,它也不会显示错误消息。有人可以帮我查一下吗?提前谢谢。

2 个答案:

答案 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]

这样的正则表达式