一个关于java正则表达式的问题,感觉就不起什么作用

「已注销」 2016-05-20 09:22:49
写一个用户注册页面,验证用户输入的用户名,要求只能输入中英文数字字符,其余的字符不能匹配
写了一个函数如下,但是不管输入什么都能通过验证,感觉这个函数的正则表达式就不起作用
代码如下:
  public boolean checkuname(String strname  )      // 通过正则表达式验证输入用户名的正确性
{
Pattern pname=Pattern.compile("[^\u4e00-\u9fa5A-Za-z0-9]"); //^[a-zA-Z0-9\u4E00-\u9FA5]+$ 验证中英文数字字符非要这么写搞不懂
Matcher m=pname.matcher("strname");
boolean regxname=m.matches();

if(strname.length()==0)
{ System.out.println("用户名不能为空!");
return false;
} else if(regxname)
{ System.out.println("用户名输入了非法字符"+strname+regxname);
return false;
}else if((strname.length()<2)||(strname.length()>20))
{ System.out.println("用户名长度必须在2个字符到20个字符之间!");
return false;
}else { System.out.println(regxname+" "+strname );
System.out.println("用户名验证成功!");
return true;
}
}
...全文
266 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
anakin_feng 2016-05-20
  • 打赏
  • 举报
回复

Pattern pname = Pattern.compile("^[a-zA-Z0-9]{2,20}");//这样就是2-20个
anakin_feng 2016-05-20
  • 打赏
  • 举报
回复
public static boolean checkuname(String strname)      // 通过正则表达式验证输入用户名的正确性
    {
        Pattern pname = Pattern.compile("[a-zA-Z0-9]+$");   //这里是大小写字母和数字
        Matcher m = pname.matcher(strname);
        boolean regxname = m.matches();
        System.out.print(strname+"    ");
        if (strname.length() == 0) {
            System.out.println("用户名不能为空!");
            return false;
        } else if (!regxname) {//这里取反
            System.out.println("用户名输入了非法字符");
            return false;
        } else if ((strname.length() < 2) || (strname.length() > 20)) {
            System.out.println("用户名长度必须在2个字符到20个字符之间!");
            return false;
        } else {
            System.out.println("用户名验证成功!");
            return true;
        }
    }
anakin_feng 2016-05-20
  • 打赏
  • 举报
回复
public static boolean checkuname(String strname) // 通过正则表达式验证输入用户名的正确性 { Pattern pname = Pattern.compile("[a-zA-Z0-9]+$"); //这里是大小写字母和数字 Matcher m = pname.matcher(strname); boolean regxname = m.matches(); System.out.print(strname+" "); if (strname.length() == 0) { System.out.println("用户名不能为空!"); return false; } else if (!regxname) {//这里取反 System.out.println("用户名输入了非法字符"); return false; } else if ((strname.length() < 2) || (strname.length() > 20)) { System.out.println("用户名长度必须在2个字符到20个字符之间!"); return false; } else { System.out.println("用户名验证成功!"); return true; } }
rickylin86 2016-05-20
  • 打赏
  • 举报
回复

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Test{
	public static void main(String[] args){
		String username = "";
		//长度2-20
		//不以数字开头
		//只能包含中文/英文/数字
		String regex = "^(?!\\d)([\u4E00-\u9FA5]|\\w){2,20}$";
		Matcher matcher = Pattern.compile(regex).matcher(username);
		if(!matcher.matches()){
			System.out.printf("username:'%s' is invalid!%n",username);
		}else{
			System.out.printf("username:'%s' is valid!%n",username);
		}
	}
}
RunningCamel 2016-05-20
  • 打赏
  • 举报
回复
1、红色地方验证有问题吧,应该是!regxname
if(strname.length()==0)
      {   System.out.println("用户名不能为空!");
          return false;  
        } else if(regxname)
        {  System.out.println("用户名输入了非法字符"+strname+regxname);
            return false;
        }else if((strname.length()<2)||(strname.length()>20))
        {   System.out.println("用户名长度必须在2个字符到20个字符之间!");
            return false;
        }else {  System.out.println(regxname+"   "+strname );
            System.out.println("用户名验证成功!");
            return true;
            }
    }
2、
("[^\u4e00-\u9fa5A-Za-z0-9]")
 
后面应该有个+号,表示多个数字或者字母。("[^\u4e00-\u9fa5A-Za-z0-9]+") 3、你代码能不能写规范点。。。
anakin_feng 2016-05-20
  • 打赏
  • 举报
回复

  public boolean checkuname(String strname  )      // 通过正则表达式验证输入用户名的正确性
    {    
Pattern pname=Pattern.compile("[^\u4e00-\u9fa5A-Za-z0-9]");   //^[a-zA-Z0-9\u4E00-\u9FA5]+$ 验证中英文数字字符非要这么写搞不懂
Matcher m=pname.matcher("strname");//这个怎么能用引号

  boolean regxname=m.matches();
 
   if(strname.length()==0)
      {   System.out.println("用户名不能为空!");
          return false;  
        } else if(regxname)
        {  System.out.println("用户名输入了非法字符"+strname+regxname);
            return false;
        }else if((strname.length()<2)||(strname.length()>20))
        {   System.out.println("用户名长度必须在2个字符到20个字符之间!");
            return false;
        }else {  System.out.println(regxname+"   "+strname );
            System.out.println("用户名验证成功!");
            return true;
            }
    }
「已注销」 2016-05-20
  • 打赏
  • 举报
回复
搞定 谢谢各位 特别是rickylin86 Molly_1994
rickylin86 2016-05-20
  • 打赏
  • 举报
回复
引用 7 楼 skyrain19782004 的回复:
[quote=引用 3 楼 rickylin86 的回复:]

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Test{
	public static void main(String[] args){
		String username = "";
		//长度2-20
		//不以数字开头
		//只能包含中文/英文/数字
		String regex = "^(?!\\d)([\u4E00-\u9FA5]|\\w){2,20}$";
		Matcher matcher = Pattern.compile(regex).matcher(username);
		if(!matcher.matches()){
			System.out.printf("username:'%s' is invalid!%n",username);
		}else{
			System.out.printf("username:'%s' is valid!%n",username);
		}
	}
}
你这个我刚试用过了 还是不行例如我输入sfd&dsh()d 的时候 仍然验证通过,我想输入任何非中英文数字字符时就验证不通过。[/quote] 你试下用"sfd&dsh()d"赋值content试下.没问题的. 应该是你读取数据的代码有问题.
kutuzov2016 2016-05-20
  • 打赏
  • 举报
回复
public boolean checkuname(String name) { String regex ="[\u4e00-\u9fa5A-Za-z0-9]{2,20}"; return name.matches(regex); }
「已注销」 2016-05-20
  • 打赏
  • 举报
回复
我刚查了 matches 方法的api说明 matches public boolean matches() 尝试将整个区域与模式匹配。 如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 返回: 当且仅当整个区域序列匹配此匹配器的模式时才返回 true。 这个意思 是不是表示 只有整个字符串匹配正则表达式才返回true啊
「已注销」 2016-05-20
  • 打赏
  • 举报
回复
各位的回复我都看了 也都试过了 ,貌似不行,我的需求是当用户名的字符串 在任何地方输入非中英文数字字符时验证不通过,我这是做的后台验证,我在前端用javascript代码验证完全没有问题,javascript代码如下
var re = /[^\w\u4e00-\u9fa5]/g
		if (re.test(username.value)) {
			pusernamemsg.innerHTML = "含有非法字符!";
			return false;
javascript的正则表达式这么写没有任何问题 ,我知道java和javascipt下正则的语法区别,在java下这么写[^\\w\u4e00-\u9fa5] 我想应该表示 非A-Za-z0-9以及非中文字符 可就是验证不能通过,我输入了以下几组测试 skyrain skyr&^fds **&^^#$($ 竟然都能通过 最奇怪的是全部为**&^^#$($ 这样的字符 竟然也能验证通过。
anakin_feng 2016-05-20
  • 打赏
  • 举报
回复
Pattern pname = Pattern.compile("^[a-zA-Z0-9]+$");
加个^
「已注销」 2016-05-20
  • 打赏
  • 举报
回复
引用 4 楼 Molly_1994 的回复:
public static boolean checkuname(String strname) // 通过正则表达式验证输入用户名的正确性 { Pattern pname = Pattern.compile("[a-zA-Z0-9]+$"); //这里是大小写字母和数字 Matcher m = pname.matcher(strname); boolean regxname = m.matches(); System.out.print(strname+" "); if (strname.length() == 0) { System.out.println("用户名不能为空!"); return false; } else if (!regxname) {//这里取反 System.out.println("用户名输入了非法字符"); return false; } else if ((strname.length() < 2) || (strname.length() > 20)) { System.out.println("用户名长度必须在2个字符到20个字符之间!"); return false; } else { System.out.println("用户名验证成功!"); return true; } }
当我输入 &sky7&fsa 如下用户名时验证仍然通过,可我的需求是用户名字符串的任何地方输入非中英数字字符时验证不通过。
「已注销」 2016-05-20
  • 打赏
  • 举报
回复
引用 3 楼 rickylin86 的回复:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Test{
	public static void main(String[] args){
		String username = "";
		//长度2-20
		//不以数字开头
		//只能包含中文/英文/数字
		String regex = "^(?!\\d)([\u4E00-\u9FA5]|\\w){2,20}$";
		Matcher matcher = Pattern.compile(regex).matcher(username);
		if(!matcher.matches()){
			System.out.printf("username:'%s' is invalid!%n",username);
		}else{
			System.out.printf("username:'%s' is valid!%n",username);
		}
	}
}
你这个我刚试用过了 还是不行例如我输入sfd&dsh()d 的时候 仍然验证通过,我想输入任何非中英文数字字符时就验证不通过。
正则表达式善于处理文本,对匹配、搜索和替换等操作都有意想不到的作用。正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率。 正则表达式应用于程序设计语言中,首次是出现在 Perl 语言,这也让 Perl 奠定了正则表达式旗手的地位。现在,它已经深入到了所有的程序设计语言中,在程序设计语言中,正则表达式可以说是标准配置了。 Java 中从 JDK 1.4 开始增加了对正则表达式的支持,至此正则表达式成为了 Java 中的基本类库,使用时不需要再导入第三方的类库了。Java 正则表达式的语法来源于象征着正则表达式标准的 Perl 语言,但也不是完全相同的,具体的可以参看 Pattern 类的 API 文档说明。 我在一次偶然中发现了位于 java.sun.com 站点上的 Java Tutorial,也在那里看到了关于 Java正则表达式教程,感觉它不同于其他的正则表达式教程,文中以大量的匹配实例来进行说明。为了能让 Java 学习者能更好地使用正则表达式,就将其完整地译出了。该教程中所介绍的正则表达式应用仅仅是最为简单的(并没有完全地涉及到 Pattern 类支持的所有正则表达式语法,也没有涉及到高级的应用),适合于从未接触过或者是尚未完全明白正则表达式基础的学习者。在学习完该教程后,应该对正则表达式有了初步的了解,并能熟练地运用 java.util.regex 包中的关于正则表达式的类库,为今后学习更高级的正则表达式技术奠定良好的基础。 教程中所有的源代码都在 src 目录下,可以直接编译运行。由于当前版本的 Java Tutorial 是基于 JDK 6.0 的,因此其中的示例程序也用到了 JDK 6.0 中的新增类库,但正则表达式在 JDK 1.4 就已经存在了,为了方便大家使用,改写了部分的源代码,源代码类名中后缀为"V4"的表示用于 JDK 1.4 或以上版本,"V5"的表示用于 JDK 5.0 或以上版本,没有这些后缀的类在各个版本中均可以正常使用。 由于译者的水平和技术能力有限,译稿虽经多次校对,难免有疏漏之处,敬请大家批评和指正。若有发现不妥之处,请发送邮件至 FrankieGao123@gmail.com,我会在 blog 中进行勘误,谢谢!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧