Search code examples
javaswingvalidationjtextfield

How to character and Numeric values restrict in TextField Java


I have two questions regarding character and numeric values limitation. I have listening to focus lost events and validating Name (character) and Contact (numeric) TextFields.

1. How do I restrict numeric data less then 3 digits and not allow more then 13 digits.

Below is the coding of my contact TextField for numeric:

private void txt_contactFocusLost(java.awt.event.FocusEvent evt) {
    if (txt_contact.getText().equals("")) {
    } else {
        String contact = txt_contact.getText();
        Pattern pt6 = Pattern
                .compile("^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]+$");
        Matcher mh6 = pt6.matcher(contact);
        boolean matchFound6 = mh6.matches();
        if (!(matchFound6)) {
            JOptionPane.showMessageDialog(null,
                    "* Enter the Numaric Values only *");
            txt_contact.setText("");
            txt_contact.requestFocus();
        }
    }
}

2. How do I restrict character data less then 3 character and not allow more then 30 characters.

private void txt_nameFocusLost(java.awt.event.FocusEvent evt) {
    if (txt_name.getText().equals("")) {
        error2.setText("Enter Full Name");
        txt_name.setText("");
    } else {
        String name = txt_name.getText();
        Pattern pt1 = Pattern.compile("^[a-zA-Z]+([\\s][a-zA-Z]+)*$");
        Matcher mh1 = pt1.matcher(name);
        boolean matchFound1 = mh1.matches();
        if (!(matchFound1)) {
            JOptionPane.showMessageDialog(null,
                    "* Enter the Character Values only *");
            txt_name.setText("");
            txt_name.requestFocus();
        } else {
            error2.setText("");
        }
    }
}

Solution

  • in the pattern you can use the statement {n,m} n- to m- times

    Duo to this you can build your pattern like this

    for your charackter comparison

    Pattern pt6=Pattern.compile("[a-zA-Z]{3,30}"); // it says, it should be 3-30 non Digits
    

    for the numbers it is

    Pattern pt6=Pattern.compile("\\d{3,13}"); // it says, it should be 3-13 Digits