匹配至少【三位数字三位字母】,可以出现在任意位置
解决方案 »
- 静态main函数中实例化自身类的问题
- 关于hibernate 联合主键 的查询问题,各位大哥大姐帮帮忙啊~~
- 乱码问题!
- oracle 转换为mysql中文乱码?
- 一句简单SQL 语句 如何 改写成 HQL 语句
- 问大家一个EJB设计的问题,有经验的进!!
- 请教,Struts中表格处理的问题。急急急。。。
- struts问题:我用<logic:iterate>标签显示结果集,出现了这个错误。请帮忙
- 高手指点:jbuilder8+tomcat4.1.18如何配置
- 关于会话Bean和实体Bean?都有分
- session过期重新登陆后要求回到原来的过期前的页面
- hibernate 原生 sql 使用聚合函数的错误。
//一定是要求一次匹配判断吗?可以曲线解决不?
String s = "dfgdfgtest123456hehe";
if(s.replaceAll("\\D","").matches("^\\d{3,20}$") && s.replaceAll("[^a-zA-Z]","").matches("^[a-zA-Z]{3,20}$")){
System.out.println("pass");
}
//比如替换掉所有非数字,剩下的看长度lenth()或者看匹配,这样不行么?
找到问题所在了,[^0-9]与[^a-zA-Z]的范围太大,把回车换行\r\n也包括在内了,因此进行多行匹配测试的时候,判断是会出现问题的。将\r\n也排除在外就ok了。
修改为:
^(?=([^0-9\r\n]*[0-9]){3,20})(?=([^a-zA-Z\r\n]*[a-zA-Z]){3,20}).{6,}$
不过若是在整段的文章中匹配的话,修改成这样要更好些。这种一般是匹配用户名什么的吧,呵呵
(?=([^0-9\s]*[0-9]){3,20})(?=([^a-zA-Z\s]*[a-zA-Z]){3,20})\w{6,}
你怎么测试的,给下你的测试代码
String[] data = new String[]{"aaa123", "a1a2a3", "aa12a3", "aa1234", "a1a223"};
String regex = "^(?=([^0-9]*[0-9]){3,20})(?=([^a-zA-Z]*[a-zA-Z]){3,20}).{6,}$";
Pattern pattern=Pattern.compile(regex);
for(int i=0;i<data.length;i++)
{
System.out.println(data[i] + " 匹配结果: " + pattern.matcher(data[i]).find());
}
/*--------输出-------
aaa123 匹配结果: true
a1a2a3 匹配结果: true
aa12a3 匹配结果: true
aa1234 匹配结果: false
a1a223 匹配结果: false
*/
"abc1abc1abc1abc1abc1abc1abc1abc1abc1"
嗯,确实,限定条件有点考虑不充分^(?=([^0-9]*[0-9]){3,20}[^0-9]*$)(?=([^a-zA-Z]*[a-zA-Z]){3,20}[^a-zA-Z]*$).{6,}$