如何只接受来自JTextField的指定模式?

时间:2018-08-02 03:34:53

标签: java regex swing

我希望JTextField仅接受我指定的模式。 “ 12ABCDE1234A1A1”

注意-该模式可以具有任何数字和字母。

JTextField t17 = new JTextField();
final String match ="(\\d\\d)-([a-zA-z]{5})-(\\d\\d\\d\\d)-([a-zA-z]{1})- 
(\\d)-([a-zA-z]{1})-(\\d)+$";
Pattern pt = Pattern.compile(match);
final Matcher mt =pt.matcher(t17.getText());
t17.addFocusListener(new FocusAdapter() {
    @Override
    public void focusLost(FocusEvent arg0) {
        if(mt.matches()){
            lblPin.setText("verified");
        }else{
            JOptionPane op = new JOptionPane();
            op.showMessageDialog(iff, "INVALID GST NUMBER");
        }
    }
});

2 个答案:

答案 0 :(得分:0)

在您的JTextField中输入tekst后,请按照以下格式验证其文字:

^\\d{2}[A-Z]{5}\\d{4}([A-Z]\\d){2}$

然后在t17.getText()方法内调用FocusAdapter,这样您将获得当前输入的文本。

您可以使用Java代码尝试此操作:

public class JavaFiddle
{
  public static void main(String[] args)
  {
    java.util.regex.Pattern pt = java.util.regex.Pattern.compile("^\\d{2}[A-Z]{5}\\d{4}([A-Z]\\d){2}$");
    java.util.regex.Matcher mt = pt.matcher("12ABCDE1234A1A1");
    if(mt.matches()){
      System.out.println("success");
    }else{
      System.out.println("failuire");
    }
  }
}

答案 1 :(得分:0)

好的,我使用JformattedtextField解决了上述问题。

MaskFormatter mask = new      MaskFormatter ("##?????####?#?# "):                    JformattedtextField tf = new        JformattedtextField (mask);

仅此而已。.不需要其他情况