Как проверить, чтобы 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
) и запрещает ввод любой нецифровой цифры.