Как проверить, чтобы jtextfield принимал только пакистанский формат cnic?

Мне нужно проверить JTextField, позволяя пользователю вводить только cnic число в соответствии с этим форматом 12345-1234567-1, я использую это регулярное выражение, но оно не работает. это моя функция

private void idSearchKeyPressed(java.awt.event.KeyEvent evt) {
    String cnicValidator = idSearch.getText();

    if (cnicValidator.matches("^[0-9+]{5}-[0-9+]{7}-[0-9]{1}$")) {
        idSearch.setEditable(true);
    }
    else {
        idSearch.setEditable(false);
    }        
}

пожалуйста, дайте мне некоторое руководство, как проверить мой jtextfield... спасибо

1 ответ

Решение

Альтернативным решением для проверки пост-ввода будет использование JFormattedTextField в сочетании с MaskFormatter ограничить ввод для начала.

Код для создания одного из них будет выглядеть примерно так:

import java.text.ParseException;

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.text.MaskFormatter;

public class Demo {

    public static void main(String[] args){

        final JFrame frame = new JFrame("Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final MaskFormatter mask;
        try {
            mask = new MaskFormatter("#####-#######-#");
        } catch (ParseException e) {
            throw new RuntimeException("Invalid format mask specified", e);
        }

        // You can optionally set a placeholder character by doing the following:
        mask.setPlaceholderCharacter('_');
        final JFormattedTextField formattedField = new JFormattedTextField(mask);

        frame.setSize(100, 100);
        frame.add(formattedField);
        frame.setVisible(true);
    }
}

Маска формата # принимает только цифры (в частности, он принимает любой символ, где Character.isDigit(char) возвращается true) и запрещает ввод любой нецифровой цифры.

Другие вопросы по тегам