>source

IP 주소의 유효성을 검사하는 간단한 Java Swing 응용 프로그램을 만들고 있습니다. 나는 JTextField 를 추가 JButton JLabel . JTextField  영숫자 값을 수락해야합니다. 즉, 사용자는 시스템 이름 또는 시스템의 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");
                    }
                }
            });
        }
    }

영숫자 이름을 입력하면'299.143.154.167'을 입력하면'IP 주소 아님'이 표시됩니다.'234.143.154.167'인 경우'유효한 IP 주소가 아님'을 표시해야하며'유효한 IP 주소'를 표시해야합니다.

>

이 코드는 Swing 관련 구성 요소를 사용하지 않으면 제대로 작동합니다 (UI 제외). 아무도 이것에 대해 나를 도울 수 있습니까?


  • 답변 # 1

    문제는 텍스트 필드의 기본 텍스트를 사용하고 있다는 것입니다. 버튼을 누를 때 텍스트를 가져와야합니다. 텍스트를 얻은 후에는 매처를 만들어야합니다.

    다음과 같이 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");
            }
        }
    
    

관련 자료

  • 이전 javascript - txt 파일의 데이터를 저장하는 방법은 함수 외부의 배열로 반환됩니까?
  • 다음 java - isis - blob/clob 필드 직렬화 문제