黑马程序员技术交流社区

标题: 【阳哥专栏】技术分活动第14期 [打印本页]

作者: 王震阳老师    时间: 2014-8-24 12:17
标题: 【阳哥专栏】技术分活动第14期
本帖最后由 就业指导-王震阳老师 于 2014-8-24 13:16 编辑

声明:以后的技术分活动中的技术题,越来越偏向于数据结构、算法、JVM、多线程、高并发等,因此对于基础的要求也是更高的。
活动目的:练习javaSE知识。

活动奖励:最高4个技术分

结束时间:2014年8月31日,过期提交可能获取不到技术分!

代码提交要求:将自己的源代码压缩然后提交,提交的时候设置为管理员权限,以其他方式提交的答案无效。上交源码的时候不需要将整个工程项目压缩,只需将用到的源文件压缩即可。

题目类型:JavaSE 正则表达式。

难易程度:较难

题目:老规矩,回帖领题


往期技术分题:【阳哥专栏】技术分活动第13期
http://bbs.itheima.com/thread-139237-1-1.html
【阳哥专栏】技术分活动第12期
http://bbs.itheima.com/thread-138162-1-1.html
【阳哥专栏】技术分活动第11期
http://bbs.itheima.com/thread-137632-1-1.html
【阳哥专栏】技术分活动第10期
http://bbs.itheima.com/thread-136866-1-1.html
【阳哥专栏】技术分活动第9期
http://bbs.itheima.com/thread-136465-1-1.html
【阳哥专栏】技术分活动第8期
http://bbs.itheima.com/thread-135781-1-1.html
【阳哥专栏】技术分活动第7期
http://bbs.itheima.com/thread-134321-1-1.html
【阳哥专栏】周末技术分活动第6期
http://bbs.itheima.com/thread-132893-1-1.html
【阳哥专栏】周末技术分活动第5期
http://bbs.itheima.com/thread-129859-1-1.html
【阳哥专栏】周末技术分活动第4期
http://bbs.itheima.com/thread-128854-1-1.html
【阳哥专栏】周末技术分活动第3期
http://bbs.itheima.com/thread-127326-1-1.html
【阳哥专栏】周末技术分活动第2期
http://bbs.itheima.com/thread-125800-1-1.html
【阳哥专栏】周末技术分派送活动第1期
http://bbs.itheima.com/thread-123979-1-1.html

















作者: 孙小亚    时间: 2014-8-24 12:24
沙发吗!!!!领题了
作者: 画了一个圈儿    时间: 2014-8-24 12:29
回帖,领题。
作者: bbdeyouxang    时间: 2014-8-24 12:46
回帖领题
作者: lhtwm1    时间: 2014-8-24 13:04
看看这期的题
作者: java_dream    时间: 2014-8-24 13:06
实战正则表达式
作者: ︶ㄣ你眼中的倒    时间: 2014-8-24 13:08
顶!!!!!!!!!!!!!!!!!!!!!!
作者: icris    时间: 2014-8-24 13:50
回帖领题
作者: yqj    时间: 2014-8-24 14:17
看看题!
作者: icris    时间: 2014-8-24 14:39
提交答案

Regexx.zip

756 Bytes, 阅读权限: 200, 下载次数: 1


作者: 迷失的独白    时间: 2014-8-24 16:29
本帖最后由 迷失的独白 于 2014-8-26 16:20 编辑

已交,羊哥请查收

RegTest.rar

672 Bytes, 阅读权限: 200, 下载次数: 1


作者: MeryStyle    时间: 2014-8-24 16:35
我来领题……。
作者: MeryStyle    时间: 2014-8-24 16:37
领题,………答题得积分!
作者: 華燈初上    时间: 2014-8-24 17:28
领题来了啊
作者: 孙小亚    时间: 2014-8-24 17:30
代码提交。。。
Demo1.zip (1017 Bytes, 下载次数: 2) 辛苦啦。。。{:2_36:}

作者: cat73    时间: 2014-8-24 17:35
正则表达式- -
这货能出啥难题- -
作者: 孙小亚    时间: 2014-8-24 17:44
嘻嘻,阳哥好人,得了4分真开心:lol
作者: 3040789425    时间: 2014-8-24 18:10
看题           
作者: 赵连明    时间: 2014-8-24 18:14
拿分了啊啊
作者: cat73    时间: 2014-8-24 19:03
本帖最后由 cat73 于 2014-8-27 22:57 编辑

regex.zip (940 Bytes, 下载次数: 1)
密码匹配做的比较简单 只检查了长度跟是否为纯数字 并且是分了两句正则(一句实在是想不出来- -) 不知道可以不- -

作者: ddewym123    时间: 2014-8-24 19:12
本帖最后由 ddewym123 于 2014-8-24 20:53 编辑

请查收!

PatternTest.rar

681 Bytes, 阅读权限: 200, 下载次数: 1


作者: Justfeeling    时间: 2014-8-24 21:44
强题目,第一次表靠前排!
作者: justin1258    时间: 2014-8-24 23:44
领题。。。
作者: 八零、玖羚    时间: 2014-8-24 23:56
回帖拿题,做练习
作者: SmallRooker    时间: 2014-8-25 04:28
参加活动报道报道,拿题。
作者: SmallRooker    时间: 2014-8-25 05:25
为什么我提交答案的时候 ,选择附件的权限没有管理员权限呢?


作者: SmallRooker    时间: 2014-8-25 05:34
孙小亚 发表于 2014-8-24 12:24
沙发吗!!!!领题了

你好,提交附件的时候 设立里边并没有  管理员阅读这个权限啊,选择哪个?
作者: SmallRooker    时间: 2014-8-25 05:41
本帖最后由 SmallRooker 于 2014-8-25 05:44 编辑

老师交题,请查收!第二次交题了,不知道能得多少分!

zhengZe.rar

3.55 KB, 阅读权限: 200, 下载次数: 1

应该是这个级别吧


作者: 依然超级赛亚人    时间: 2014-8-25 08:16
一帖不落,帖帖必看!
作者: wwfkofufo    时间: 2014-8-25 08:56
阳哥。我来了。{:3_55:}
作者: THE_FUTURE    时间: 2014-8-25 09:34
来l了!!!
作者: THE_FUTURE    时间: 2014-8-25 09:45
已上传。。

第14期.rar

305 Bytes, 阅读权限: 150, 下载次数: 1


作者: 喜爱    时间: 2014-8-25 10:05
13的题目还在酝酿当中,14就有了,王哥这样给力!
作者: bbdeyouxang    时间: 2014-8-25 10:09
交题!!!

PatternTest.rar

1.3 KB, 阅读权限: 200, 下载次数: 1


作者: Justfeeling    时间: 2014-8-25 10:27
领题目先,赞一个!
作者: 孙小亚    时间: 2014-8-25 11:27
SmallRooker 发表于 2014-8-25 05:34
你好,提交附件的时候 设立里边并没有  管理员阅读这个权限啊,选择哪个? ...

看到你下面提交的了,就是这个权限(黑马官方管理员)
作者: Wokno    时间: 2014-8-25 11:31
看看,,,,,,,,,
作者: 晓_猪    时间: 2014-8-25 11:50
看看!!!!!!!!!!!!!!!!!
作者: 刘亚东    时间: 2014-8-25 12:07
回帖领题,最近技术分活动好频繁啊!
作者: 潘多拉    时间: 2014-8-25 13:18
滔哥又发福利啦,谢谢涛哥哥哦
作者: 菜鸟一号    时间: 2014-8-25 13:42
回复看题
作者: yqj    时间: 2014-8-25 14:30
ok,交题目!

RegexTest.zip

2.04 KB, 阅读权限: 200, 下载次数: 1


作者: 喜爱    时间: 2014-8-25 15:52
提交内容。。。。。。

校验.zip

2.91 KB, 阅读权限: 200, 下载次数: 1


作者: java_dream    时间: 2014-8-25 16:31
提交正则表达式源码啦!快快给分哈:lol

test.rar

1.51 KB, 阅读权限: 200, 下载次数: 1

正则表达式


作者: 地狱天堂    时间: 2014-8-25 17:46
回帖领题
作者: nadax    时间: 2014-8-25 18:15
必须来拿题啊
作者: 地狱天堂    时间: 2014-8-25 21:15
验证密码和IP花了3小时,算不算慢啊??

RegexTest.rar

946 Bytes, 阅读权限: 200, 下载次数: 1


作者: 小乖乖灬浩歌    时间: 2014-8-25 22:23
我大洋洋哥威武   前来领题
作者: 心者觉也    时间: 2014-8-25 22:34
看题                     
作者: huanglyhf    时间: 2014-8-25 22:54
老规矩,先领个题.
作者: 付剑翊    时间: 2014-8-25 23:31
看来技术分真正体现他的含义了
作者: hsy    时间: 2014-8-25 23:46
看看题吧先
作者: 八零、玖羚    时间: 2014-8-26 08:45
刚好看到这儿,先搞定了:lol

UtilsOfRegex.rar

1.29 KB, 阅读权限: 200, 下载次数: 1

正则


作者: hsy    时间: 2014-8-26 10:28
交题啦。。。做了三个,哎

正则.zip

1.56 KB, 阅读权限: 200, 下载次数: 1


作者: 黄金23    时间: 2014-8-26 15:04
边学习边拿分,开心:lol
作者: wenjd0000    时间: 2014-8-26 17:57
本帖最后由 wenjd0000 于 2014-8-26 19:27 编辑

先来瞄一眼题目难度

Regix.rar

1.05 KB, 下载次数: 191

编码在此


作者: 2528870651    时间: 2014-8-26 21:18
有多难??
作者: zhumy111    时间: 2014-8-26 22:06
回复,领题了
作者: tonglingwang    时间: 2014-8-26 22:20
我来领题啦
作者: zhumy111    时间: 2014-8-26 22:51
学习了,最后一个IP还不知道怎么100%完善,请查阅

Test5.zip

598 Bytes, 阅读权限: 200, 下载次数: 1


作者: 丸子    时间: 2014-8-27 08:12
领题来了啊
作者: 丸子    时间: 2014-8-27 09:43
希望的4分。谢谢

Excise5Hm.rar

597 Bytes, 阅读权限: 200, 下载次数: 1

.java文件


作者: 剑雨星空    时间: 2014-8-27 10:00
我要做题赚分,谢谢
作者: 剑雨星空    时间: 2014-8-27 10:03
领题啦领题啦  谢谢
作者: 杨桦    时间: 2014-8-27 15:06
看题来了
作者: java_dream    时间: 2014-8-27 15:34
13、14期的源码都提交3天了,怎么还没得技术分呢?是答案不对吗?
作者: 王震阳老师    时间: 2014-8-27 15:40
java_dream 发表于 2014-8-27 15:34
13、14期的源码都提交3天了,怎么还没得技术分呢?是答案不对吗?

不到活动结束时间。活动结束了才公布答案。
作者: li495512592    时间: 2014-8-27 17:23
不知道会不会,回一下,又不会掉肉
作者: xplcc    时间: 2014-8-27 20:46
看题看题
作者: 沿途小将    时间: 2014-8-27 21:04
我来看看题
作者: 旭辉lin    时间: 2014-8-27 21:14
阳哥,赶紧给题吧,技术分差老多。
作者: 王震阳老师    时间: 2014-8-27 21:20
旭辉lin 发表于 2014-8-27 21:14
阳哥,赶紧给题吧,技术分差老多。

都有很多期了,把没一期的都做会技术分就有了。
作者: 天邃任我桓    时间: 2014-8-27 21:21
领题,看看!
作者: 孙雯    时间: 2014-8-27 21:59
先领下题,正则表达式这块儿还没啃。给自己加油↖(^ω^)↗
作者: Fengs    时间: 2014-8-27 23:27
领题!!!!!!
作者: lvc    时间: 2014-8-27 23:38
看看。。
作者: SmallRooker    时间: 2014-8-28 04:26
阳哥,我的题目已经交了4天了,为什么还没有查阅呢,我的技术分啊,我盼技术分盼的都快哭了!
作者: xiayoutianxia    时间: 2014-8-28 09:57
刚来,还不是很懂啊
作者: 逸晨    时间: 2014-8-28 10:23
领题看看。
作者: 王震阳老师    时间: 2014-8-28 10:27
SmallRooker 发表于 2014-8-28 04:26
阳哥,我的题目已经交了4天了,为什么还没有查阅呢,我的技术分啊,我盼技术分盼的都快哭了! ...

活动时间还没有截止,截止的时候就公布。
作者: Fengs    时间: 2014-8-28 10:55
领题啊!!!!
作者: ximi    时间: 2014-8-28 12:17
谢谢了,领题了
作者: 王震阳老师    时间: 2014-8-28 13:41
ddewym123 发表于 2014-8-24 19:12
请查收!

挺好:
  1. package com.cn.brainfreeze;

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

  4. public class PatternTest {

  5.         public static void main(String[] args) {
  6.                 String eMail="ddezzw@126.com";
  7.                 String phoneNumber="13455667788";
  8.                 String password="ddd123";
  9.                 String ip="192.168.253.12";               
  10.                 System.out.println(matchMail(eMail));
  11.                 System.out.println(matchPhoneNumber(phoneNumber));
  12.                 System.out.println(matchPassword(password));
  13.                 System.out.println(matchIP(ip));               
  14.         }
  15.         //具体匹配方法
  16.         private static boolean match(String ip, String regex) {
  17.                 Pattern pattern=Pattern.compile(regex);
  18.                 Matcher matcher=pattern.matcher(ip);
  19.                 return matcher.matches();               
  20.         }
  21.         //匹配ip地址
  22.         public static boolean matchIP(String ip) {
  23.                 String regex="^((([1-9]?\\d)|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))\\.){3}(([1-9]?\\d)|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))$";
  24.                 return match(ip,regex);               
  25.         }
  26.         //匹配密码
  27.         public static boolean matchPassword(String password) {
  28.                 String regex="^(?![0-9]+$)\\w{6,12}$";
  29.                 return match(password,regex);
  30.         }
  31.         //匹配国内手机号
  32.         public static boolean matchPhoneNumber(String phoneNumber) {
  33.                 String regex="^1((3[0-9])|(5[\\d&&[^4]])|(8[05-9]))\\d{8}$";
  34.                 return match(phoneNumber,regex);       
  35.         }
  36.         //匹配邮箱
  37.         public static boolean matchMail(String eMail) {
  38.                 String regex="^\\w+@\\w+(\\.\\w+)+$";
  39.                 return match(eMail,regex);
  40.         }

  41. }
复制代码

作者: 王震阳老师    时间: 2014-8-28 13:42
SmallRooker 发表于 2014-8-25 05:41
老师交题,请查收!第二次交题了,不知道能得多少分!

挺好:
  1. /*
  2.         要求:用Java代码做以下正则匹配,模拟用户注册时,验证填写信息的准确性
  3.         1、匹配邮箱
  4.         2、匹配手机号
  5.         3、匹配密码(6~12位之间,不能为纯数字)
  6.         4、匹配IP(IPv4)
  7. */

  8. import java.util.regex.Matcher;
  9. import java.util.regex.Pattern;
  10. public class Demo {

  11.         public static void main(String[] args) throws Exception{
  12.                 //掉用验证邮箱正则函数
  13.                 Mail.pattern("12345@qq.com");
  14.                 //调用查看手机号正则表达式
  15.                 ClassPathResource.isMobileNO("12016155153");  
  16.             //验证密码是否符合规范
  17.                 Sn.shCheck();
  18.                 //验证IP是否符合规则
  19.                 Ipbl.IPisCorrect("192.168.1.222");
  20.         }
  21.        

  22. }
  23. //验证邮箱类
  24. class Mail{
  25.        
  26.          public static void pattern(String mail){
  27.                         //电子邮件
  28.                         String check = "^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$";
  29.                         Pattern regex = Pattern.compile(check);
  30.                         Matcher matcher = regex.matcher(mail);
  31.                         boolean isMatched = matcher.matches();
  32.                         System.out.println(isMatched);//输出验证邮箱是否通过
  33.                         }
  34. }
  35. //验证手机号类
  36. class ClassPathResource {  

  37.         public static void isMobileNO(String mobiles){  
  38.        
  39.         Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");  
  40.         Matcher m = p.matcher(mobiles);  
  41.         System.out.println(m.matches());//输出手机号是否匹配真或者假
  42.         }

  43. }  
  44. //验证密码是否符合规则
  45. class Sn
  46. {
  47.         public static void shCheck()
  48.         {
  49.                 String regex = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$";               

  50.                 String value = "aaa";  // 长度不够
  51.                 System.out.println(value.matches(regex));

  52.                 value = "1111aaaa1111aaaaa";  // 太长
  53.                 System.out.println(value.matches(regex));

  54.                 value = "111111111"; // 纯数字
  55.                 System.out.println(value.matches(regex));

  56.                 value = "aaaaaaaaa"; // 纯字母
  57.                 System.out.println(value.matches(regex));

  58.                 value = "####@@@@#"; // 特殊字符
  59.                 System.out.println(value.matches(regex));

  60.                 value = "1111aaaa";  // 数字字母组合
  61.                 System.out.println(value.matches(regex));

  62.                 value = "aaaa1111"; // 数字字母组合
  63.                 System.out.println(value.matches(regex));

  64.                 value = "aa1111aa";        // 数字字母组合
  65.                 System.out.println(value.matches(regex));

  66.                 value = "11aaaa11";        // 数字字母组合
  67.                 System.out.println(value.matches(regex));

  68.                 value = "aa11aa11"; // 数字字母组合
  69.                 System.out.println(value.matches(regex));
  70.                
  71.         }
  72. }
  73. //验证IP是否符合规则
  74. class Ipbl
  75. {
  76.         public static void IPisCorrect(String ip)
  77.         {//正则表达式判断IP正确性
  78.         //import java.util.regex.*;
  79.         Pattern p=Pattern.compile("^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$");
  80.         Matcher m = p.matcher(ip);
  81.         System.out.println(m.matches());
  82.        
  83.         }
  84. }
复制代码

作者: 王震阳老师    时间: 2014-8-28 13:46
yqj 发表于 2014-8-25 14:30
ok,交题目!

榜样:
  1. package cn.test;

  2. /**
  3. *
  4. 要求:用Java代码做以下正则匹配,模拟用户注册时,验证填写信息的准确性
  5. 1、匹配邮箱
  6. 2、匹配手机号
  7. 3、匹配密码(6~12位之间,不能为纯数字)
  8. 4、匹配IP(IPv4)
  9. *
  10. */
  11. import java.lang.reflect.InvocationTargetException;
  12. import java.lang.reflect.Method;
  13. import java.util.Scanner;

  14. public class RegexTest {
  15.         public static void main(String[] args) {
  16.                 RegexTest regexTest=new RegexTest();
  17.                 Scanner sc=new Scanner(System.in);

  18.                 while(true){
  19.                         System.out.println("模拟用户注册");
  20.                        
  21.                         System.out.println("请输入您的邮箱地址:");
  22.                         verify(regexTest,"regexEmail",sc);
  23.                        
  24.                         System.out.println("请输入您的手机号码:");
  25.                         verify(regexTest,"regexPhoneNum",sc);
  26.                         System.out.println("请输入您的密码:");
  27.                        
  28.                         verify(regexTest,"regexPassword",sc);
  29.                         System.out.println("请输入您的IP地址:");
  30.                        
  31.                         verify(regexTest,"regexIP",sc);
  32.                         System.out.println("恭喜您注册成功!!");

  33.                         System.out.println("是否继续?输入Y继续,其他任意键回车后退出");
  34.                        
  35.                         if("Y".equalsIgnoreCase(sc.nextLine())){
  36.                                 continue;
  37.                         }else{
  38.                                 break;
  39.                         }
  40.                 }
  41.                 sc.close();
  42.         }
  43.        
  44.        
  45.         //验证方法(为了节省代码,用反射的方式进行)
  46.         private static void verify(RegexTest regexTest, String methodName, Scanner sc) {
  47.                 //获取对象的字节码
  48.                 Class<? extends RegexTest> clazz=regexTest.getClass();
  49.                 Method m=null;
  50.                 try {
  51.                         //得到验证的方法
  52.                         m=clazz.getMethod(methodName, String.class);
  53.                 } catch (NoSuchMethodException | SecurityException e1) {
  54.                         throw new RuntimeException("没有该验证方法!");
  55.                 }
  56.                 while(true){
  57.                         String str=sc.nextLine();
  58.                         try {
  59.                                 m.invoke(regexTest, str);
  60.                                 System.out.println("验证通过!");
  61.                                 break;
  62.                         } catch (Exception e) {
  63.                                 //获取原方法抛出的异常
  64.                                 InvocationTargetException te=(InvocationTargetException)e;
  65.                                 System.out.println(te.getTargetException().getMessage());
  66.                                 continue;
  67.                         }
  68.                 }
  69.         }

  70.         /*
  71.          * ipv4一共四段,如192.168.1.234,每一段中最大数字时255最小为0,可以分为三中情况(中括号内代表当前位置可以出现的数字)
  72.          * 一.以2开头的3位数:25[0-5],24[0-9],正则表达式表示可以为:2[0-4]\\d|25[0-5]
  73.          * 二.以1开头的3位数:1[0-9][0-9],正则表达式表示可以为:1\\d{2}
  74.          * 三.两位数或三位数时,两位数[1-9][0-9],一位数时[0-9],可以合并为一中情况:[1-9]?\\d
  75.          */

  76.         public boolean regexIP(String str) {
  77.                 String regex = "(([1-9]?\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(([1-9]?\\d|1\\d{2}|2[0-4]\\d|25[0-5]))";
  78.                 boolean t = str.matches(regex);
  79.                 if(t){
  80.                         return true;
  81.                 }else{
  82.                         throw new RuntimeException("您的ip地址不合法!请重新输入:");
  83.                 }

  84.         }

  85.         // 邮箱格式xxxx@xx.xx(末尾可以有多个.xx,每段的字符大于一个),精确验证,第一段可以是单词字符:[a-zA-Z_0-9],第二段为非“_”的单词字符,第三段及之后只能是字母

  86.         public boolean regexEmail(String str) {
  87.                 String regex = "\\w+@[\\w&&[^_]]+(\\.[a-zA-Z]+)+";
  88.                 boolean t = str.matches(regex);
  89.                 if(t){
  90.                         return true;
  91.                 }else{
  92.                         throw new RuntimeException("您的邮箱格式不合法!请重新输入:");
  93.                 }
  94.         }

  95.         // (6~12位之间,不能为纯数字),分两次验证,首先验证长度,再验证密码是否合法

  96.         public boolean regexPassword(String str) {
  97.                 String regex = ".{6,12}";        //判断6~12位
  98.                 boolean t = str.matches(regex);
  99.                 if (str.matches(str)) {
  100.                         regex = "\\d+";        //判断纯数字
  101.                         t = str.matches(regex);
  102.                         if(!t){
  103.                                 return true;
  104.                         }
  105.                 }
  106.                 throw new RuntimeException("您的密码格式不合法!请重新输入:");
  107.         }

  108.         /*
  109.          * 手机号码段中国电信手机号码开头数字 2G/3G号段(CDMA2000网络)133、153、180、181、189 4G号段 177
  110.          * 中国联通手机号码开头数字 2G号段(GSM网络)130、131、132、155、156 3G号段(WCDMA网络)185、186 4G号段 176
  111.          * 中国移动手机号码开头数字
  112.          * 2G号段(GSM网络)有134x(0-8)、135、136、137、138、139、150、151、152、158、159
  113.          * 、182、183、184。 3G号段(TD-SCDMA网络)有157、187、188 4G号段 178补充
  114.          * 170号段为虚拟运营商专属号段,170号段的 11 位手机号前四位来区分基础运营商,其中 “1700” 为中国电信的转售号码标识,“1705”
  115.          * 为中国移动,“1709” 为中国联通。 卫星通信 1349
  116.          */
  117.         // 手机号码可以分为13xxxxxxxxx,15xxxxxxxxx,18xxxxxxxxx,4G的17[6-8]xxxxxxxx和虚拟运营商专属号段170[059]

  118.         public boolean regexPhoneNum(String str) {
  119.                 String regex = "(1[358]\\d\\d|17[6-8]\\d|170[059])\\d{7}";
  120.                 boolean t = str.matches(regex);
  121.                 if(t){
  122.                         return true;
  123.                 }else{
  124.                         throw new RuntimeException("您的手机号码格式不合法!请重新输入:");
  125.                 }
  126.         }
  127. }
复制代码

作者: 王震阳老师    时间: 2014-8-28 13:46
喜爱 发表于 2014-8-25 15:52
提交内容。。。。。。

挺好:
  1. package com.itheima.verify;

  2. /**
  3. *
  4. * @author 喜爱
  5. * 校验工具类
  6. */
  7. public class VerfiyUtil {

  8.         /**
  9.          * 校验邮箱格式)
  10.          * <p>只是判断邮箱格式是否正确,无法判断该邮箱是否存在</p>
  11.          * @param email
  12.          * @return boolean
  13.          */
  14.         public static boolean isEmail(String email){
  15.                 String regex = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}";
  16.                 if(email == null || "".equals(email))
  17.                         return false;
  18.                 return email.matches(regex);
  19.         }
  20.        
  21.         /**
  22.          * 校验手机号码格式
  23.          * @param phone
  24.          * @return boolean
  25.          */
  26.         public static boolean isPhone(String phone){
  27.                 //手机号码
  28.                 String MOBILE_REGEX = "1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}";
  29.                 //中国移动
  30.                 String CM_REGES = "1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}";
  31.                 //中国联通
  32.                 String CU_REGEX = "1(3[0-2]|5[256]|8[56])\\d{8}";
  33.                 //中国电信
  34.                 String CT_REGEX = "1((33|53|8[09])[0-9]|349)\\d{7}";
  35.                    if(phone == null || "".equals(phone))
  36.                         return false;
  37.                 return phone.matches(MOBILE_REGEX) || phone.matches(CM_REGES) || phone.matches(CU_REGEX) || phone.matches(CT_REGEX);
  38.         }
  39.        
  40.         /**
  41.          * 校验密码格式(6~12位之间,不能为纯数字)
  42.          * @param password
  43.          * @return boolean
  44.          */
  45.         public static boolean isPassword(String password){
  46.                 String regex = "\\d+";
  47.                 if(password == null || "".equals(password))
  48.                         return false;
  49.                 if(password.matches(regex))
  50.                         return false;
  51.                 if(password.length() < 6 || password.length() > 12)
  52.                         return false;
  53.                 return true;
  54.         }
  55.         /**
  56.          * 校验IPv4
  57.          * @param ip
  58.          * @return boolean
  59.          */
  60.         public static boolean isIPv4(String ip)
  61.         {
  62.                 String regex = "(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])";
  63.                 if(ip == null || "".equals(ip))
  64.                         return false;
  65.                 return ip.matches(regex);
  66.         }
  67. }
复制代码

作者: 王震阳老师    时间: 2014-8-28 13:47
java_dream 发表于 2014-8-25 16:31
提交正则表达式源码啦!快快给分哈

挺好:
  1. package test;

  2. import java.io.Console;
  3. import java.util.Scanner;
  4. import java.util.regex.Matcher;
  5. import java.util.regex.Pattern;

  6. /**
  7. * 该程序可以验证 邮箱、手机号码、密码、IPv4
  8. * 运行改程序,根据提示输入相应内容即可验证
  9. * 该程序也是正则表达式测试用工具
  10. * @author 蔡廷标
  11. *
  12. */
  13. public class RegexTest {

  14.         public static void main(String[] args) {
  15.                 regexSystem();
  16.         }

  17.         //定义一个获取正则表达式的方法
  18.         public static Pattern getPattern(int select) {
  19.                 //邮箱格式:(以注册新浪微博的邮箱验证为例)   (至少一个字母或数字或下划线)@(至少一个字母或数字)((.(2-4个字母))至少出现一次)、字母都是小写
  20.                 //手机号码格式   移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
  21.                 //         联通:130、131、132、152、155、156、185、186
  22.                 //         电信:133、153、180、189、(1349卫通)
  23.                 //密码格式:以字母开头,长度在6~12之间,只能包含单词字符和下划线。

  24.                 //^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$
  25.                 //regexs是一个保存了邮箱、手机号、密码和IPv4的正则表达式的字符串数组
  26.                 String[] regexs = {
  27.                                 "^[a-z0-9_]+@[a-z0-9]+(.[a-z]{2,4})+",
  28.                                 "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$",
  29.                                 "^[a-zA-Z]\\w{5,11}$",
  30.                                 "(2[5][0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})" };
  31.                
  32.                 //根据传入的数字返回相应的正则表达式对象
  33.                 switch (select) {
  34.                 case 1:
  35.                         return Pattern.compile(regexs[0]);
  36.                 case 2:
  37.                         return Pattern.compile(regexs[1]);
  38.                 case 3:
  39.                         return Pattern.compile(regexs[2]);
  40.                 case 4:
  41.                         return Pattern.compile(regexs[3]);
  42.                 default:
  43.                         return null;
  44.                 }
  45.         }
  46.        
  47.         //正则表达式验证方法
  48.         public static void regexSystem() {
  49.                 Scanner scanner = new Scanner(System.in);
  50.                 String[] print = {"请输入邮箱地址: ","请输入手机号码: ","请输入密码: ","请输入IPv4地址: "};
  51.                
  52.                 while (true) {
  53.                         System.out.println("欢迎进入正则表达式匹配系统!");
  54.                         System.out.println("您可以选择以下服务:");
  55.                         System.out.println("1.匹配邮箱  2、匹配手机号  3、匹配密码(6~12位之间,不能为纯数字) 4、匹配IP(IPv4)");
  56.                        
  57.                         String select = null;
  58.                         boolean isNum = true;
  59.                         // 判断输入的内容是否为(1~4),如果不是数字,则重新输入
  60.                         do{
  61.                                 System.out.printf("%n请选择所需要的服务(输入1-4): ");
  62.                                 select = scanner.nextLine();
  63.                                 Pattern pattern = Pattern.compile("[1-4]");
  64.                                 isNum = pattern.matcher(select).matches();
  65.                         }while(!isNum);
  66.                         //根据输入的数字获取相应的正则表达式对象
  67.                         Pattern pattern = getPattern(Integer.parseInt(select));
  68.                         System.out.printf(print[Integer.parseInt(select)-1]);
  69.                         //创建匹配给定输入与此模式的匹配器
  70.                         Matcher matcher = pattern.matcher(scanner.nextLine());
  71.                         //返回是否匹配成功
  72.                         boolean matching = matcher.matches();
  73.                         if(matching){
  74.                                 System.out.println("内容匹配OK的\n");
  75.                         }else{
  76.                                 System.out.println("内容不格式不对!\n");
  77.                         }
  78.                 }
  79.         }

  80. }
复制代码

作者: 王震阳老师    时间: 2014-8-28 13:49
八零、玖羚 发表于 2014-8-26 08:45
刚好看到这儿,先搞定了

挺好:
  1. package original;

  2. /**
  3. * 要求:用Java代码做以下正则匹配,模拟用户注册时,验证填写信息的准确性 1、匹配邮箱 2、匹配手机号 3、匹配密码(6~12位之间,不能为纯数字)
  4. * 4、匹配IP(IPv4)
  5. *
  6. * @author Cavenzep
  7. *
  8. */
  9. public class UtilsOfRegex {

  10.         public static void main(String[] args) {
  11.                 // TODO Auto-generated method stub
  12.                 // System.out.println(checkOfMail("cavenzep@163.com"));
  13.                 // System.out.println(checkOfPhone("18767330888"));
  14.                 // System.out.println(checkOfPassword("bjss1_2red"));
  15.                 System.out.println(checkOfIP("0.111.0.122"));
  16.         }

  17.         /**
  18.          * 邮箱验证
  19.          *
  20.          * @param strMail
  21.          *            待验证的邮箱
  22.          * @return true 邮箱符合规则 false 邮箱不符合规则
  23.          */
  24.         public static boolean checkOfMail(String strMail) {
  25.                 // 邮箱要求:字符数字下划线组合@数字.字符,并且后面的.字符部分最多会出现3次
  26.                 String regex = "\\w+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}";
  27.                 return strMail.matches(regex);
  28.         }

  29.         /**
  30.          * 手机号验证
  31.          *
  32.          * @param strPhone
  33.          *            待验证的手机号
  34.          * @return true 手机号符合规则 false 手机号不符合规则
  35.          *
  36.          */
  37.         public static boolean checkOfPhone(String strPhone) {
  38.                 // 手机号要求:假设手机网段只有13X、15X、18X三个,长度为11的数组组合,首位为1
  39.                 String regex = "1[358]\\d{9}";
  40.                 return strPhone.matches(regex);
  41.         }

  42.         /**
  43.          * 密码验证
  44.          *
  45.          * @param strPassword
  46.          *            待验证的秘密
  47.          * @return true 密码符合规则 false 密码不符合规则
  48.          */
  49.         public static boolean checkOfPassword(String strPassword) {
  50.                 // 密码要求:字母数字下划线6~12位,不能为纯数字
  51.                 //先验证6~12位的\w,再验证不为纯数字
  52.                 String regex = "\\w{6,12}";
  53.                 String regexOfNum = "\\d{6,12}";
  54.                 return strPassword.matches(regex) && (!strPassword.matches(regexOfNum));
  55.         }

  56.         /**
  57.          * IP验证
  58.          *
  59.          * @param strIP
  60.          *            待验证的IP地址
  61.          * @return true IP符合规则 false IP不符合规则
  62.          */
  63.         public static boolean checkOfIP(String strIP) {
  64.                 // IPv4的要求:共分成四段,每段在0~255间,并且只显示非首次为零之后的数(如001只有显示为1才符合要求)
  65.                 // 可以将每段的值分成250~255、200~249、0~199三大段,并且0~199可以分为0~9、10~99、100~199三小段,逐个分析
  66.                 // 第一块250~255:25[0-5]。
  67.                 // 第二块200~249:2[0-4]\d。
  68.                 // 第三块0~199分别由
  69.                 // 0~9:\d,10~99:[1-9]\d,100~199:1\d{2}合并为([1-9]?\d)|(1\d{2})。
  70.                 // 上述三大块合并起来就是(25[0-5])|(2[0-4]\d)|((1\d{2})|([1-9]?\d)),加上利用(XXX)(\.(XXX)){3}原理完成正则表达式的拼接即可
  71.                 //((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))
  72.                 String regex = "((25[0-5])|(2[0-4]\\d)|(1\\d{2})|([1-9]?\\d))(\\.((25[0-5])|(2[0-4]\\d)|(1\\d{2})|([1-9]?\\d))){3}";
  73.                 return strIP.matches(regex);
  74.         }

  75. }
复制代码

作者: ximi    时间: 2014-8-28 13:57
阳哥,代码已经提交,谢谢啦:lol

Demo.zip

1.45 KB, 阅读权限: 200, 下载次数: 1


作者: 潘多拉    时间: 2014-8-28 14:30
使用同一张头像有点搞混乱了,嘿嘿
作者: 丸子    时间: 2014-8-28 18:10
谢谢,王老师:lol
作者: 冒牌高手    时间: 2014-8-28 19:54
不会也得看一下
作者: 她只是过客    时间: 2014-8-28 20:45
技术分不好拿,我来领题了
作者: SmallRooker    时间: 2014-8-28 21:15
杨哥,顶起!
作者: 茂子    时间: 2014-8-28 22:00
练习练习

作者: 八零、玖羚    时间: 2014-8-28 22:59
就业指导-王震阳老师 发表于 2014-8-28 13:49
挺好:

谢阳哥了:lol
作者: cyc52tjm    时间: 2014-8-29 00:10
看看题,嘿嘿
作者: 旅行。    时间: 2014-8-29 09:33
回帖..........领题
作者: 旅行。    时间: 2014-8-29 09:57
本帖最后由 旅行。 于 2014-8-29 09:59 编辑

    112321

作者: 旅行。    时间: 2014-8-29 10:03
阳哥,可不可以不回复就看技术题出现在项目的哪个步骤?每次出技术题的时候,可不可以在题目下加个项目出现位置.就像正则:前台验证

Yz.rar

906 Bytes, 下载次数: 203






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2