这个正则表达式有些问题,我无法弄清楚
Some thing is wrong in this regular expression and i cant figure it out
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 个 else 条件正在检查空字段并且它工作正常。在这些检查之后,我添加了正则表达式并验证输入,在最后一个嵌套的 if 中,我将使用 JDBC 代码将数据插入我的 table,但它没有通过第一个用户名验证.
鉴于以下输入,我不明白为什么:
username : maisam123
password : abc123
confirm password: abc123
在您的模式 (" ^[a-z0-9]{3,15}&"
) 的开头有一个 space 和一个尾随的 & 符号(因此只有 String
(s) 以 space 开头并且以&符号结尾的将通过)。另外,您没有包含大写字母。
String usernamePat = "^[a-z0-9]{3,15}";
但是,要允许大写字母,它应该类似于
String usernamePat = "^[A-Za-z0-9]{3,15}";
结束符号是 $
而不是 &
。你的开头还有一个额外的space。
^[a-z0-9]{3,15}$
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 个 else 条件正在检查空字段并且它工作正常。在这些检查之后,我添加了正则表达式并验证输入,在最后一个嵌套的 if 中,我将使用 JDBC 代码将数据插入我的 table,但它没有通过第一个用户名验证.
鉴于以下输入,我不明白为什么:
username : maisam123
password : abc123
confirm password: abc123
在您的模式 (" ^[a-z0-9]{3,15}&"
) 的开头有一个 space 和一个尾随的 & 符号(因此只有 String
(s) 以 space 开头并且以&符号结尾的将通过)。另外,您没有包含大写字母。
String usernamePat = "^[a-z0-9]{3,15}";
但是,要允许大写字母,它应该类似于
String usernamePat = "^[A-Za-z0-9]{3,15}";
结束符号是 $
而不是 &
。你的开头还有一个额外的space。
^[a-z0-9]{3,15}$