首页 > 解决方案 > 如何只接受来自 JTextField 的指定模式?

问题描述

我只想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");
        }
    }
});

标签: javaregexswing

解决方案


将 tekst 输入到您的 之后JTextField,根据此模式验证它的文本:

^\\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");
    }
  }
}

推荐阅读