簡體   English   中英

使用Java Swing組件時無法使用正則表達式驗證JTextField的值

[英]Cannot validate JTextField's value using Regular expression while using Java Swing components

我正在創建一個簡單的Java Swing應用程序以驗證IP地址。 我添加了JTextFieldJButtonJLabel JTextField應該接受AlphaNumeric值 ,即-用戶可以輸入系統名稱或系統IP地址。 我為此場景添加了2個驗證。 在單擊JButton ,首先它將使用此模式檢查IP地址的格式(以識別它是名稱還是IP地址)。

"^([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})$".

如果是IP地址,則將使用此模式檢查它是否為有效IP地址

"^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"

並顯示一條消息-有效與否。

問題-如果輸入格式正確的無效IP地址,例如-

299.143.154.167

第一次驗證沒有成功。

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;

    public class RegexDemo {
        public static String regExToCheckIPAddress = "^([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})$";
        public static Pattern pattern1;
        public static Matcher matcher1;
        public static String regExToCheckValidIPAddress = "^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." +
                                                          "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." +
                                                          "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." +
                                                          "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
        public static Pattern pattern2;
        public static Matcher matcher2;

        public static void main(String[] args) {
            JFrame frame = new JFrame("IP Address validation");
            JPanel panel = new JPanel();
            JTextField txtField = new JTextField();
            JButton btn = new JButton("Validate");
            JLabel lbl = new JLabel();
            lbl.setFont(new Font("Arial", Font.PLAIN, 12));
            lbl.setForeground(Color.RED);

            panel.setBounds(5,5,350,250);
            panel.setLayout(null);

            txtField.setBounds(5,5,130,25);
            btn.setBounds(20,40,80,25);
            lbl.setBounds(145,5,100,25);

            panel.add(txtField);
            panel.add(btn);
            panel.add(lbl);

            frame.add(panel);
            frame.setSize(330,300);
            frame.setLayout(null);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);

            String text = txtField.getText().trim();

            pattern1 = Pattern.compile(regExToCheckIPAddress);
            matcher1 = pattern1.matcher(text);

            pattern2 = Pattern.compile(regExToCheckValidIPAddress);
            matcher2 = pattern2.matcher(text);

            btn.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent ae) {
                    if (matcher1.matches()) {
                        if (!matcher2.matches()) {
                            lbl.setText("Not a valid IP Address");
                        } else {
                            lbl.setText("Valid IP Address");
                        }
                    } else {
                        lbl.setText("Not an IP Address");
                    }
                }
            });
        }
    }

如果輸入字母數字名稱 ,則應顯示“不是IP地址” ;如果輸入“ 299.143.154.167” ,則應顯示“不是有效的IP地址” ;如果輸入“ 234.143.154.167” ,則應顯示“有效IP地址” '

如果我不使用Swing相關組件(無UI),則此代碼工作正常。 誰可以幫我這個事?

問題是您使用的是文本字段的默認文本。 按下按鈕時,您需要獲取文本。 獲取文本后,您需要創建匹配器。

您需要像這樣在actionPerformed方法中獲取文本並使用新文本創建匹配器:

    public void actionPerformed(ActionEvent ae) {
        String text = txtField.getText().trim();
        matcher1 = pattern1.matcher(text);
        matcher2 = pattern2.matcher(text);
        if (matcher1.matches()) {
            if (!matcher2.matches()) {
                lbl.setText("Not a valid IP Address");
            } else {
                lbl.setText("Valid IP Address");
            }
        } else {
            lbl.setText("Not an IP Address");
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM