这个正则表达式有些不对劲,我无法弄明白

时间:2015-01-21 23:22:34

标签: java regex jtextfield

public void actionPerformed(ActionEvent e) {

    String usernamePat = " ^[a-z0-9]{3,15}&";
    String passwordPat = "((?=.*\\d)(?=.*[A-Za-z]).{6,20})";

    String strName = regname.getText();

    char[] mypass1 = pass1.getPassword();
    String strPass1 = new String(mypass1);

    char[] mypass2 = pass2.getPassword();
    String strPass2 = new String(mypass2);

    if (strName.isEmpty()) {
        obj.info("Please enter your username!", "Error");
        return;
    }

    if (strPass1.isEmpty()) {
        obj.info("Please enter your password!", "Error");
        return;
    }

    if (strPass2.isEmpty()) {
        obj.info("Please enter your password again!", "Error");
        return;
    }

    Pattern patU = Pattern.compile(usernamePat);
    Pattern patP = Pattern.compile(passwordPat);

    Matcher matU = patU.matcher(strName);
    Matcher matP = patP.matcher(strPass1);

    if (matU.matches()) {

        if (matP.matches()) {

            if (strPass1.equals(strPass2)) {

            } else {
                obj.info("Passwords dont match, please confirm it again", "Error");
            }

        } else {
            obj.info("You can only use alphabets/numbers in Password", "Error");
        }

    } else {
        obj.info("Please use only alphabets & numbers in Username", "Error");
    }

}

我把所有东西写在这个地方, 我正在转换字符串中的输入,然后其他3个条件检查空字段,它工作正常。在那些检查之后,我添加了正则表达式并验证了输入,并且在最后一次嵌套if中,我将把JDBC代码插入到我的表中,但它没有通过第一次用户名验证。

我不明白为什么,给出以下输入:

username : maisam123
password : abc123
confirm password: abc123

enter image description here

2 个答案:

答案 0 :(得分:2)

在模式的开头有一个空格(" ^[a-z0-9]{3,15}&")和一个尾随的&符号(所以只有String(s)以空格开头,以&符号结尾才能通过)。另外,你没有包含大写字母。

String usernamePat = "^[a-z0-9]{3,15}";

但是,为了允许大写字母,它应该像

String usernamePat = "^[A-Za-z0-9]{3,15}";

答案 1 :(得分:1)

结束标志为$而非&。你也有一个额外的空间。

^[a-z0-9]{3,15}$