赞
踩
心得:
拿着一个正确的数据,从左到右依次去写正则表达式。
手机号码正则表达:
手机号:13112345678 15712345678 18812345678 139456789024
电话号码(座机)正则表达:
电话号码(座机):020-2324242 02122442 027-42424 0712-3242434
邮箱号码正则表达:
邮箱号:3232323@qq.com zhangsan@itcast.cnn d_lei0009@163.com dlei0009@pci.com.cn
package com.app.demo27_regex; public class Test1 { public static void main(String[] args) { /* 正则表达式的基本练习1: 一、需求: 请编写正则表达式验证用户输入的手机号码是否满足要求。 请编写正则表达式验证用户输入的电话号码是否满足要求。 请编写正则表达式验证用户输入的邮箱号是否满足要求。 二、心得: 拿着一个正确的数据,从左到右依次去写正则表达式。 */ /* 例如: 手机号:13112345678 15712345678 18812345678 139456789024 电话号码(座机):020-2324242 02122442 027-42424 0712-3242434 邮箱号:3232323@qq.com zhangsan@itcast.cnn d_lei0009@163.com dlei0009@pci.com.cn */ /* 1、手机号码正则表达 手机号:13112345678 15712345678 18812345678 139456789024 思路: 分成三个部分: 第一部分:第一位只能是1开头 第二部分:第二位是3-9 第三部分:第二位之后的是0-9(任意数字) */ /*正则表达式分析: [1]: 表示手机号码的第一位只能是1开头 [3-9]: 表示手机号码的第二位只能是3-9 \\d{9}: 表示手机号码第二位之后的都是任意数字(0-9),只能出现9次 */ String phoneRegex1 = "[1][3-9]\\d{9}"; // String类的matches()方法: 判断该字符串是否与给定的正则表达式匹配 System.out.println("13112345678".matches(phoneRegex1)); System.out.println("15712345678".matches(phoneRegex1)); System.out.println("18812345678".matches(phoneRegex1)); System.out.println("139456789024".matches(phoneRegex1)); System.out.println("---------------------------"); /* 2、电话号码(座机)正则表达 电话号码(座机):020-2324242 02122442 027-42424 0712-3242434 思路: 分成三部分: 第一部分:第一位是区号(0),第二位开始是任意数字(0-9,可以出现2-3次) 第二部分:第四位是 “-”,出现的次数是1次或0次 第三部分:号码(总长度5-10) 号码的第一位只能是1-9开头 第一位之后的是0-9(任意数字) */ /* 正则表达式分析: [0]: 表示区号只能是数字0 \\d{2,3}: 表示区号之后可以是任意数字,只能出现2-3次 -?: 表示这个杠出现的次数是1次或0次(可有可无) [1-9]: 表示号码的第一位只能是1-9开头 \\d{4,9}: 表示号码第一位之后的可以是任意数字(0-9),只能出现4-9次 */ String phoneRegex2 = "[0]\\d{2,3}-?[1-9]\\d{4,9}"; System.out.println("020-2324242".matches(phoneRegex2)); System.out.println("02122442".matches(phoneRegex2)); System.out.println("027-42424".matches(phoneRegex2)); System.out.println("0712-3242434".matches(phoneRegex2)); System.out.println("---------------------------"); /* 3、邮箱号码正则表达 邮箱号:3232323@qq.com zhangsan@itcast.cnn d_lei0009@163.com dlei0009@pci.com.cn 思路: 分成三个部分: 第一部分:@的左边 可以是数字、大小写字母、下划线 至少要出现一次 第二部分:@ 只能出现一次 第三部分: (1)"." 的左边:可以是数字、大小写字母(除了下划线),总共出现2-6次 (2)"." (3)"."的右边:可以是大小写字母,只能出现2-3次 (4)我们可以把(2) */ /* 正则表达式分析: \\w+: 表示@左边可以是数字、大小写字母、下划线,至少出现1次 @: 表示@,只能出现1次 [\\w&&[^_]]{2,6}: 表示 . 的左边,可以是数字、字母(除了下划线),总共出现2-6次 (\\.[a-zA-Z]{2,3}){1,2}: 表示将 . 与 .右边的字母作为一组,可以出现1-2次 \\.: 表示 . [a-zA-Z]{2,3}: 表示 . 的右边,只能是大小写字母,只能出现2-3次 */ String mailRegex = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}"; System.out.println("3232323@qq.com".matches(mailRegex)); System.out.println("zhangsan@itcast.cnn".matches(mailRegex)); System.out.println("d_lei0009@163.com".matches(mailRegex)); System.out.println("dlei0009@pci.com.cn".matches(mailRegex)); } }
true true true false --------------------------- true true true true --------------------------- true true true true Process finished with exit code 0
package com.app.demo27_regex; import java.util.Scanner; public class Test2 { public static void main(String[] args) { /* 正则表达式的基本练习2: - 请编写正则表达式验证用户名是否满足要求: - 要求:大小写字母、数字、下划线,长度4-16位 - 请编写正则表达式验证身份证号码是否满足要求: - 简单要求:18位,前17位为任意数字,最后一位可以是任意数字也可以是大写或小写的x - 复杂要求:按照身份证号码的格式严格要求。 正确的身份证号码: 41080119930228457x、510801197609022309、15040119810705387X、430102197606046442 */ // 创建键盘录入对象 Scanner sc = new Scanner(System.in); checkUsername(sc); // 正则校验用户名 checkID1(sc); // 简单正则校验身份证 checkID2(sc); // 复杂正则校验身份证 } /** * 正则校验用户名 * @param sc 键盘录入对象 */ private static void checkUsername(Scanner sc) { /* - 1、正则表达式验证用户名: - 大小写字母、数字、下划线:\\w - 长度4-16位:\\w{4,16} */ String nameRegex = "\\w{4,16}"; System.out.println("------正则校验用户名-------"); System.out.println("请输入您的用户名:"); String username = sc.next(); if (username.matches(nameRegex)) { System.out.println("用户名校验成功!"); }else { System.out.println("用户名校验失败!"); } } /** * 正则简单校验身份证号码 * @param sc 键盘录入对象 */ private static void checkID1(Scanner sc) { /* - 2、正则表达式验证身份证号码: - 简单: - 前17位为任意数字:\\d{17} - 最后一位可以是任意数字也可以是大写X或小写x:[\\dXx]、(\\d|X|x)、(\\d|(?i)x) */ // 简单正则 String IDRegex1 = "\\d{17}[\\dXx]"; System.out.println("------简单正则校验身份证号码-------"); System.out.println("请输入您的身份证号码:"); String ID = sc.next(); if (ID.matches(IDRegex1)) { System.out.println("身份证简单校验成功!"); }else { System.out.println("身份证简单校验失败!"); } } /** * 正则复杂校验身份证号码 * @param sc 键盘录入对象 */ private static void checkID2(Scanner sc) { /* - 复杂: - 前6位:省份、市区、派出所等信息,第一位不能为0,后面5位是任意数字:[1-9]\\d{5} - 年的前2位:18 19 20:(18|19|20) - 年的后2位:任意数字出现两次:\\d{2} - 月份:01~09、10、11、12:(0[1-9]|1[0-2]) - 日期:01~09、10~19、20~29、30、31:(0[1-9]|12[0-9]|3[01]) - 后面四位: - 前三位:任意数字出现3次:\\d{3} - 最后一位:可以是任意数字也可以是大写X或小写x:(\\d|(?i)x) */ // 复杂正则 String IDRegex2 = "[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|12[0-9]|3[01])\\d{3}(\\d|(?i)x)"; System.out.println("请输入您的身份证号码:"); String ID2 = sc.next(); if (ID2.matches(IDRegex2)) { System.out.println("身份证复杂校验成功!"); }else { System.out.println("身份证复杂校验失败!"); } } }
------正则校验用户名-------
请输入您的用户名:
Hu_2022Abc
用户名校验成功!
------简单正则校验身份证号码-------
请输入您的身份证号码:
41080119930228457x
身份证简单校验成功!
请输入您的身份证号码:
510801217600321156
身份证复杂校验失败!
Process finished with exit code 0
符号 | 含义 | 举例 |
---|---|---|
[] | 里面的内容出现一次 | [0-9]、[a-zA-Z0-9] |
() | 分组 | a(bc)+ |
^ | 取反 | [^abc] |
&& | 交集,不能写单个的& | [a-z&&m-p] |
| | 写在方括号外面表示并集 | [a-zA-Z0-9]、x|X |
. | 任意字符 | \n:回车符号不匹配 |
\ | 转义字符 | \ \d |
\ \d | 0-9 | \ \d+ |
\ \D | 非0-9 | \ \D+ |
\ \s | 空白字符 | [\t\n\x0B\f\r] |
\ \S | 非空白字符 | [^\s] |
\ \w | 单词字符 | [a-zA-Z_0-9] |
\ \W | 非单词字符 | [^\w] |
? | 0次或1次 | \ \d? |
* | 0次或多次 | \ \d*、(abc) * |
+ | 1次或多次 | \ \d+、(abc)+ |
{} | 具体次数 | a{7}、\ \d{7,19} |
(?i) | 忽略后面字符的大小写 | (?i)abc |
a((?i)b)c | 只忽略b的大小写 | a((?i)b)c |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。