2015-10-15 2 views
1

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

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); 
    }   
} 

любезно предоставить мне guidence как проверить мою JTextField ... спасибо

+0

«Не работает», что он делает вместо того, что вы ожидаете? Работает ли он на некоторые входы? –

+0

Отбросьте '+' из '[0-9 +]', если вам действительно не нужно соответствовать '+'. Вы также можете использовать '\ d' (экранированный в' \\ d' в строковом литерале Java) для соответствия цифрам. –

+0

Если пользователь ввел несоответствующий ввод, почему вы отключите 'idSearch', не позволяя им его изменить? –

ответ

2

Альтернативное решение для проверки пост-вход будет использовать 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), и запрещает любые Некоммерческие -digit от ввода.

Смежные вопросы