You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java注册界面用户名正则校验失效,合法输入被判定非法求助

问题分析与解决

核心问题:用户名正则规则不支持大写字母

你输入的用户名是Bababa(包含大写字母),但你的用户名正则^[a-z0-9_-]{5,12}(?!\\\\s)$只允许小写字母、数字、下划线、短横线,所以直接匹配失败,触发"Invalid Username"提示。

正则与校验逻辑的其他问题

  1. 多余的负前瞻写法:末尾的(?!\\\\s)$完全没必要,^...$已经是整串匹配,只要字符集里不包含空格,就不会允许空格出现在用户名里,这个写法反而容易引入错误。
  2. 错误的校验方法:你用matcher.find()做校验,它只会查找字符串中是否有匹配的子串,而不是检查整串是否完全符合规则。比如输入 Bababa(前后带空格),find()会匹配到中间的Bababa,但实际上这是无效的用户名,应该用matches()来强制整串匹配。

修正方案

  1. 修改用户名正则:加入大写字母支持,或者启用不区分大小写模式
    • 允许大小写字母的正则:
      Pattern reUser = Pattern.compile("^[a-zA-Z0-9_-]{5,12}$");
      
    • 启用不区分大小写模式(正则只写小写,编译时加标志):
      Pattern reUser = Pattern.compile("^[a-z0-9_-]{5,12}$", Pattern.CASE_INSENSITIVE);
      
  2. 替换校验方法:把所有matcher.find()改成matcher.matches(),确保整串符合规则
  3. 优化密码不匹配的提示:最后一个else分支是密码不匹配的情况,建议把提示改成"Passwords do not match",更准确

修正后的核心代码示例

if ( nameLargeButton.equals("Sign-in")){
    String user = username[1].getText();          

    char[] passChars = password[1].getPassword(); 
    String pass = new String(passChars);          

    char[] cfPassChars = confirmPassInput.getPassword(); 
    String cfPass = new String(cfPassChars);  

    // 修正后的正则规则
    Pattern reUser = Pattern.compile("^[a-zA-Z0-9_-]{5,12}$");  
    Pattern rePass = Pattern.compile("^.{6,}$");             

    if(e.getSource() == largeButton){
        boolean userValid = reUser.matcher(user).matches();
        boolean passValid = rePass.matcher(pass).matches();
        boolean passMatch = pass.equals(cfPass);

        if (userValid && passValid && passMatch) {
            JOptionPane.showMessageDialog(null, "Success", "Thông báo", JOptionPane.WARNING_MESSAGE);
        }
        else if (!userValid){
            JOptionPane.showMessageDialog(null, "Invalid Username", "Thông báo", JOptionPane.WARNING_MESSAGE);
            resetLoginDialog();
        }
        else if (!passValid){
            JOptionPane.showMessageDialog(null, "Invalid Password", "Thông báo", JOptionPane.WARNING_MESSAGE);
        } 
        else {
            JOptionPane.showMessageDialog(null, "Passwords do not match", "Thông báo", JOptionPane.WARNING_MESSAGE);
        }
    }
}

内容的提问来源于stack exchange,提问作者user23884438

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 01:55:18