黑马程序员技术交流社区
标题: 【阳哥专栏】技术分活动第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
你好,提交附件的时候 设立里边并没有 管理员阅读这个权限啊,选择哪个?
作者: 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
看到你下面提交的了,就是这个权限(黑马官方管理员)
作者: 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
不到活动结束时间。活动结束了才公布答案。
作者: 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
都有很多期了,把没一期的都做会技术分就有了。
作者: 天邃任我桓 时间: 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
活动时间还没有截止,截止的时候就公布。
作者: Fengs 时间: 2014-8-28 10:55
领题啊!!!!
作者: ximi 时间: 2014-8-28 12:17
谢谢了,领题了
作者: 王震阳老师 时间: 2014-8-28 13:41
挺好:
- package com.cn.brainfreeze;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class PatternTest {
- public static void main(String[] args) {
- String eMail="ddezzw@126.com";
- String phoneNumber="13455667788";
- String password="ddd123";
- String ip="192.168.253.12";
- System.out.println(matchMail(eMail));
- System.out.println(matchPhoneNumber(phoneNumber));
- System.out.println(matchPassword(password));
- System.out.println(matchIP(ip));
- }
- //具体匹配方法
- private static boolean match(String ip, String regex) {
- Pattern pattern=Pattern.compile(regex);
- Matcher matcher=pattern.matcher(ip);
- return matcher.matches();
- }
- //匹配ip地址
- public static boolean matchIP(String ip) {
- 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]))$";
- return match(ip,regex);
- }
- //匹配密码
- public static boolean matchPassword(String password) {
- String regex="^(?![0-9]+$)\\w{6,12}$";
- return match(password,regex);
- }
- //匹配国内手机号
- public static boolean matchPhoneNumber(String phoneNumber) {
- String regex="^1((3[0-9])|(5[\\d&&[^4]])|(8[05-9]))\\d{8}$";
- return match(phoneNumber,regex);
- }
- //匹配邮箱
- public static boolean matchMail(String eMail) {
- String regex="^\\w+@\\w+(\\.\\w+)+$";
- return match(eMail,regex);
- }
- }
复制代码
作者: 王震阳老师 时间: 2014-8-28 13:42
挺好:
- /*
- 要求:用Java代码做以下正则匹配,模拟用户注册时,验证填写信息的准确性
- 1、匹配邮箱
- 2、匹配手机号
- 3、匹配密码(6~12位之间,不能为纯数字)
- 4、匹配IP(IPv4)
- */
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class Demo {
- public static void main(String[] args) throws Exception{
- //掉用验证邮箱正则函数
- Mail.pattern("12345@qq.com");
- //调用查看手机号正则表达式
- ClassPathResource.isMobileNO("12016155153");
- //验证密码是否符合规范
- Sn.shCheck();
- //验证IP是否符合规则
- Ipbl.IPisCorrect("192.168.1.222");
- }
-
- }
- //验证邮箱类
- class Mail{
-
- public static void pattern(String mail){
- //电子邮件
- String check = "^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$";
- Pattern regex = Pattern.compile(check);
- Matcher matcher = regex.matcher(mail);
- boolean isMatched = matcher.matches();
- System.out.println(isMatched);//输出验证邮箱是否通过
- }
- }
- //验证手机号类
- class ClassPathResource {
- public static void isMobileNO(String mobiles){
-
- Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
- Matcher m = p.matcher(mobiles);
- System.out.println(m.matches());//输出手机号是否匹配真或者假
- }
- }
- //验证密码是否符合规则
- class Sn
- {
- public static void shCheck()
- {
- String regex = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$";
- String value = "aaa"; // 长度不够
- System.out.println(value.matches(regex));
- value = "1111aaaa1111aaaaa"; // 太长
- System.out.println(value.matches(regex));
- value = "111111111"; // 纯数字
- System.out.println(value.matches(regex));
- value = "aaaaaaaaa"; // 纯字母
- System.out.println(value.matches(regex));
- value = "####@@@@#"; // 特殊字符
- System.out.println(value.matches(regex));
- value = "1111aaaa"; // 数字字母组合
- System.out.println(value.matches(regex));
- value = "aaaa1111"; // 数字字母组合
- System.out.println(value.matches(regex));
- value = "aa1111aa"; // 数字字母组合
- System.out.println(value.matches(regex));
- value = "11aaaa11"; // 数字字母组合
- System.out.println(value.matches(regex));
- value = "aa11aa11"; // 数字字母组合
- System.out.println(value.matches(regex));
-
- }
- }
- //验证IP是否符合规则
- class Ipbl
- {
- public static void IPisCorrect(String ip)
- {//正则表达式判断IP正确性
- //import java.util.regex.*;
- 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])$");
- Matcher m = p.matcher(ip);
- System.out.println(m.matches());
-
- }
- }
复制代码
作者: 王震阳老师 时间: 2014-8-28 13:46
榜样:
- package cn.test;
- /**
- *
- 要求:用Java代码做以下正则匹配,模拟用户注册时,验证填写信息的准确性
- 1、匹配邮箱
- 2、匹配手机号
- 3、匹配密码(6~12位之间,不能为纯数字)
- 4、匹配IP(IPv4)
- *
- */
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import java.util.Scanner;
- public class RegexTest {
- public static void main(String[] args) {
- RegexTest regexTest=new RegexTest();
- Scanner sc=new Scanner(System.in);
- while(true){
- System.out.println("模拟用户注册");
-
- System.out.println("请输入您的邮箱地址:");
- verify(regexTest,"regexEmail",sc);
-
- System.out.println("请输入您的手机号码:");
- verify(regexTest,"regexPhoneNum",sc);
- System.out.println("请输入您的密码:");
-
- verify(regexTest,"regexPassword",sc);
- System.out.println("请输入您的IP地址:");
-
- verify(regexTest,"regexIP",sc);
- System.out.println("恭喜您注册成功!!");
- System.out.println("是否继续?输入Y继续,其他任意键回车后退出");
-
- if("Y".equalsIgnoreCase(sc.nextLine())){
- continue;
- }else{
- break;
- }
- }
- sc.close();
- }
-
-
- //验证方法(为了节省代码,用反射的方式进行)
- private static void verify(RegexTest regexTest, String methodName, Scanner sc) {
- //获取对象的字节码
- Class<? extends RegexTest> clazz=regexTest.getClass();
- Method m=null;
- try {
- //得到验证的方法
- m=clazz.getMethod(methodName, String.class);
- } catch (NoSuchMethodException | SecurityException e1) {
- throw new RuntimeException("没有该验证方法!");
- }
- while(true){
- String str=sc.nextLine();
- try {
- m.invoke(regexTest, str);
- System.out.println("验证通过!");
- break;
- } catch (Exception e) {
- //获取原方法抛出的异常
- InvocationTargetException te=(InvocationTargetException)e;
- System.out.println(te.getTargetException().getMessage());
- continue;
- }
- }
- }
- /*
- * ipv4一共四段,如192.168.1.234,每一段中最大数字时255最小为0,可以分为三中情况(中括号内代表当前位置可以出现的数字)
- * 一.以2开头的3位数:25[0-5],24[0-9],正则表达式表示可以为:2[0-4]\\d|25[0-5]
- * 二.以1开头的3位数:1[0-9][0-9],正则表达式表示可以为:1\\d{2}
- * 三.两位数或三位数时,两位数[1-9][0-9],一位数时[0-9],可以合并为一中情况:[1-9]?\\d
- */
- public boolean regexIP(String str) {
- 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]))";
- boolean t = str.matches(regex);
- if(t){
- return true;
- }else{
- throw new RuntimeException("您的ip地址不合法!请重新输入:");
- }
- }
- // 邮箱格式xxxx@xx.xx(末尾可以有多个.xx,每段的字符大于一个),精确验证,第一段可以是单词字符:[a-zA-Z_0-9],第二段为非“_”的单词字符,第三段及之后只能是字母
- public boolean regexEmail(String str) {
- String regex = "\\w+@[\\w&&[^_]]+(\\.[a-zA-Z]+)+";
- boolean t = str.matches(regex);
- if(t){
- return true;
- }else{
- throw new RuntimeException("您的邮箱格式不合法!请重新输入:");
- }
- }
- // (6~12位之间,不能为纯数字),分两次验证,首先验证长度,再验证密码是否合法
- public boolean regexPassword(String str) {
- String regex = ".{6,12}"; //判断6~12位
- boolean t = str.matches(regex);
- if (str.matches(str)) {
- regex = "\\d+"; //判断纯数字
- t = str.matches(regex);
- if(!t){
- return true;
- }
- }
- throw new RuntimeException("您的密码格式不合法!请重新输入:");
- }
- /*
- * 手机号码段中国电信手机号码开头数字 2G/3G号段(CDMA2000网络)133、153、180、181、189 4G号段 177
- * 中国联通手机号码开头数字 2G号段(GSM网络)130、131、132、155、156 3G号段(WCDMA网络)185、186 4G号段 176
- * 中国移动手机号码开头数字
- * 2G号段(GSM网络)有134x(0-8)、135、136、137、138、139、150、151、152、158、159
- * 、182、183、184。 3G号段(TD-SCDMA网络)有157、187、188 4G号段 178补充
- * 170号段为虚拟运营商专属号段,170号段的 11 位手机号前四位来区分基础运营商,其中 “1700” 为中国电信的转售号码标识,“1705”
- * 为中国移动,“1709” 为中国联通。 卫星通信 1349
- */
- // 手机号码可以分为13xxxxxxxxx,15xxxxxxxxx,18xxxxxxxxx,4G的17[6-8]xxxxxxxx和虚拟运营商专属号段170[059]
- public boolean regexPhoneNum(String str) {
- String regex = "(1[358]\\d\\d|17[6-8]\\d|170[059])\\d{7}";
- boolean t = str.matches(regex);
- if(t){
- return true;
- }else{
- throw new RuntimeException("您的手机号码格式不合法!请重新输入:");
- }
- }
- }
复制代码
作者: 王震阳老师 时间: 2014-8-28 13:46
挺好:
- package com.itheima.verify;
- /**
- *
- * @author 喜爱
- * 校验工具类
- */
- public class VerfiyUtil {
- /**
- * 校验邮箱格式)
- * <p>只是判断邮箱格式是否正确,无法判断该邮箱是否存在</p>
- * @param email
- * @return boolean
- */
- public static boolean isEmail(String email){
- String regex = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}";
- if(email == null || "".equals(email))
- return false;
- return email.matches(regex);
- }
-
- /**
- * 校验手机号码格式
- * @param phone
- * @return boolean
- */
- public static boolean isPhone(String phone){
- //手机号码
- String MOBILE_REGEX = "1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}";
- //中国移动
- String CM_REGES = "1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}";
- //中国联通
- String CU_REGEX = "1(3[0-2]|5[256]|8[56])\\d{8}";
- //中国电信
- String CT_REGEX = "1((33|53|8[09])[0-9]|349)\\d{7}";
- if(phone == null || "".equals(phone))
- return false;
- return phone.matches(MOBILE_REGEX) || phone.matches(CM_REGES) || phone.matches(CU_REGEX) || phone.matches(CT_REGEX);
- }
-
- /**
- * 校验密码格式(6~12位之间,不能为纯数字)
- * @param password
- * @return boolean
- */
- public static boolean isPassword(String password){
- String regex = "\\d+";
- if(password == null || "".equals(password))
- return false;
- if(password.matches(regex))
- return false;
- if(password.length() < 6 || password.length() > 12)
- return false;
- return true;
- }
- /**
- * 校验IPv4
- * @param ip
- * @return boolean
- */
- public static boolean isIPv4(String ip)
- {
- 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])";
- if(ip == null || "".equals(ip))
- return false;
- return ip.matches(regex);
- }
- }
复制代码
作者: 王震阳老师 时间: 2014-8-28 13:47
挺好:
- package test;
- import java.io.Console;
- import java.util.Scanner;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- /**
- * 该程序可以验证 邮箱、手机号码、密码、IPv4
- * 运行改程序,根据提示输入相应内容即可验证
- * 该程序也是正则表达式测试用工具
- * @author 蔡廷标
- *
- */
- public class RegexTest {
- public static void main(String[] args) {
- regexSystem();
- }
- //定义一个获取正则表达式的方法
- public static Pattern getPattern(int select) {
- //邮箱格式:(以注册新浪微博的邮箱验证为例) (至少一个字母或数字或下划线)@(至少一个字母或数字)((.(2-4个字母))至少出现一次)、字母都是小写
- //手机号码格式 移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
- // 联通:130、131、132、152、155、156、185、186
- // 电信:133、153、180、189、(1349卫通)
- //密码格式:以字母开头,长度在6~12之间,只能包含单词字符和下划线。
- //^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$
- //regexs是一个保存了邮箱、手机号、密码和IPv4的正则表达式的字符串数组
- String[] regexs = {
- "^[a-z0-9_]+@[a-z0-9]+(.[a-z]{2,4})+",
- "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$",
- "^[a-zA-Z]\\w{5,11}$",
- "(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})" };
-
- //根据传入的数字返回相应的正则表达式对象
- switch (select) {
- case 1:
- return Pattern.compile(regexs[0]);
- case 2:
- return Pattern.compile(regexs[1]);
- case 3:
- return Pattern.compile(regexs[2]);
- case 4:
- return Pattern.compile(regexs[3]);
- default:
- return null;
- }
- }
-
- //正则表达式验证方法
- public static void regexSystem() {
- Scanner scanner = new Scanner(System.in);
- String[] print = {"请输入邮箱地址: ","请输入手机号码: ","请输入密码: ","请输入IPv4地址: "};
-
- while (true) {
- System.out.println("欢迎进入正则表达式匹配系统!");
- System.out.println("您可以选择以下服务:");
- System.out.println("1.匹配邮箱 2、匹配手机号 3、匹配密码(6~12位之间,不能为纯数字) 4、匹配IP(IPv4)");
-
- String select = null;
- boolean isNum = true;
- // 判断输入的内容是否为(1~4),如果不是数字,则重新输入
- do{
- System.out.printf("%n请选择所需要的服务(输入1-4): ");
- select = scanner.nextLine();
- Pattern pattern = Pattern.compile("[1-4]");
- isNum = pattern.matcher(select).matches();
- }while(!isNum);
- //根据输入的数字获取相应的正则表达式对象
- Pattern pattern = getPattern(Integer.parseInt(select));
- System.out.printf(print[Integer.parseInt(select)-1]);
- //创建匹配给定输入与此模式的匹配器
- Matcher matcher = pattern.matcher(scanner.nextLine());
- //返回是否匹配成功
- boolean matching = matcher.matches();
- if(matching){
- System.out.println("内容匹配OK的\n");
- }else{
- System.out.println("内容不格式不对!\n");
- }
- }
- }
- }
复制代码
作者: 王震阳老师 时间: 2014-8-28 13:49
挺好:
- package original;
- /**
- * 要求:用Java代码做以下正则匹配,模拟用户注册时,验证填写信息的准确性 1、匹配邮箱 2、匹配手机号 3、匹配密码(6~12位之间,不能为纯数字)
- * 4、匹配IP(IPv4)
- *
- * @author Cavenzep
- *
- */
- public class UtilsOfRegex {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- // System.out.println(checkOfMail("cavenzep@163.com"));
- // System.out.println(checkOfPhone("18767330888"));
- // System.out.println(checkOfPassword("bjss1_2red"));
- System.out.println(checkOfIP("0.111.0.122"));
- }
- /**
- * 邮箱验证
- *
- * @param strMail
- * 待验证的邮箱
- * @return true 邮箱符合规则 false 邮箱不符合规则
- */
- public static boolean checkOfMail(String strMail) {
- // 邮箱要求:字符数字下划线组合@数字.字符,并且后面的.字符部分最多会出现3次
- String regex = "\\w+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}";
- return strMail.matches(regex);
- }
- /**
- * 手机号验证
- *
- * @param strPhone
- * 待验证的手机号
- * @return true 手机号符合规则 false 手机号不符合规则
- *
- */
- public static boolean checkOfPhone(String strPhone) {
- // 手机号要求:假设手机网段只有13X、15X、18X三个,长度为11的数组组合,首位为1
- String regex = "1[358]\\d{9}";
- return strPhone.matches(regex);
- }
- /**
- * 密码验证
- *
- * @param strPassword
- * 待验证的秘密
- * @return true 密码符合规则 false 密码不符合规则
- */
- public static boolean checkOfPassword(String strPassword) {
- // 密码要求:字母数字下划线6~12位,不能为纯数字
- //先验证6~12位的\w,再验证不为纯数字
- String regex = "\\w{6,12}";
- String regexOfNum = "\\d{6,12}";
- return strPassword.matches(regex) && (!strPassword.matches(regexOfNum));
- }
- /**
- * IP验证
- *
- * @param strIP
- * 待验证的IP地址
- * @return true IP符合规则 false IP不符合规则
- */
- public static boolean checkOfIP(String strIP) {
- // IPv4的要求:共分成四段,每段在0~255间,并且只显示非首次为零之后的数(如001只有显示为1才符合要求)
- // 可以将每段的值分成250~255、200~249、0~199三大段,并且0~199可以分为0~9、10~99、100~199三小段,逐个分析
- // 第一块250~255:25[0-5]。
- // 第二块200~249:2[0-4]\d。
- // 第三块0~199分别由
- // 0~9:\d,10~99:[1-9]\d,100~199:1\d{2}合并为([1-9]?\d)|(1\d{2})。
- // 上述三大块合并起来就是(25[0-5])|(2[0-4]\d)|((1\d{2})|([1-9]?\d)),加上利用(XXX)(\.(XXX)){3}原理完成正则表达式的拼接即可
- //((?:(?: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))))
- 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}";
- return strIP.matches(regex);
- }
- }
复制代码
作者: 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
谢阳哥了: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 |