以QQ号为例
我们先对QQ的规则做一个判断
JAVA代码如下:
public static boolean checkQQ(String qq){ //长度在6~20位以内 int len=qq.length(); if(len<6||len>20) return false; //0不能在开头 //char c=qq.charAt(0); if(qq.startsWith("0")) return false; //必须全部是数字 for(int i=0;i<qq.length();i++){ char c=qq.charAt(i); if(c<'0'||c>'9') return false; } return true; }
使用正则表达式后,代码如下
String qq="1234567890"; boolean result=checkQQ(qq); //System.out.println(result); //true //正则表达式 System.out.println(qq.matches("[1-9]\\d{5,19}"));
常见的正则表达式如下:
正则表达式是java.lang.object类中的子类pattern类
使用前需要导包java.util.regex.Pattern
下面是关于正则表达式的应用:
public class RegexDemo2 {
public static void main(String[] args) {
//public boolean matches(String regex):判断是否与正则表达式匹配,匹配返回true
//字符类(只能匹配一个字符)
//只能出现abc,一个[]只能匹配一个字符
System.out.println("---1---");
System.out.println("a".matches("[abc]")); //true
System.out.println("ab".matches("[abc]")); //false
System.out.println("ab".matches("[abc][abc]")); //true
//不能出现abc
System.out.println("---2---");
System.out.println("a".matches("[^abc]")); //false
//a到z A到Z的范围
System.out.println("---3---");
System.out.println("a".matches("[a-zA-Z]")); //true
System.out.println("az".matches("[a-zA-Z][a-zA-Z]")); //true
System.out.println("0".matches("[a-zA-Z0-9]")); //true
//[a-d[m-p]] a到d,或者m到p
System.out.println("---4---");
System.out.println("e".matches("[a-d[m-p]]")); //false
System.out.println("m".matches("[a-d[m-p]]")); //true
//[a-z&&[def]] a-z和def的交集 为 d、e、f
//细节:交集要写&& 而不能写& 写成&没有任何含义,只是一个&符号
System.out.println("---5---");
System.out.println("d".matches("[a-z&&[def]]")); //true
System.out.println("t".matches("[a-z&&[def]]")); //false
//[a-z&&[^bc] a-z和非bc的交集
System.out.println("---6---");
System.out.println("a".matches("[a-z&&[^bc]]")); //true
System.out.println("b".matches("[a-z&&[^bc]]")); //false
//[a-z&&[^m-p] a到z和非(m到p)的交集
System.out.println("---7---");
System.out.println("a".matches("[a-z&&[^m-p]]")); //true
System.out.println("m".matches("[a-z&&[^m-p]]")); //false
}
public static void main(String[] args) {
//预定义字符(只能匹配一个字符)
// \转义字符 改变后面那个字符原本的含义
// ""在Java中表示字符串的开头或者结尾
System.out.println("\"");
// .表示任意一个字符
System.out.println("---1---");
System.out.println("火".matches(".")); //true
System.out.println("火影".matches("..")); //true
// \\d 表示任意的一个数字
System.out.println("---2---");
System.out.println("3".matches("\\d")); //true
System.out.println("33".matches("\\d\\d")); //true
// \\w只能是一位单词字符 [a-zA-Z_0-9]
System.out.println("---3---");
System.out.println("_".matches("\\w")); //true
System.out.println("g".matches("\\w")); //true
System.out.println("6".matches("\\w")); //true
// 非单词字符 \\W
System.out.println("---4---");
System.out.println("原".matches("\\W")); //true
System.out.println("原".matches("\\w")); //false
//校验多个字符
/*
X? X出现1次或0次
X* X出现0次或多次
X+ X出现一次或多次
X{n} X正好n次
X{n,} X至少n次
X{n,m} X至少n次,不超过m次
*/
//必须是数字 字母 下划线 至少6位
System.out.println("---5---");
System.out.println("as314v".matches("\\w{6,}")); //true
System.out.println("as31".matches("\\w{6,}")); //false
// 必须是数字和字符 必须是4位
System.out.println("---6---");
System.out.println("23dF".matches("[a-zA-Z0-9]{4}")); //true
System.out.println("2h0k".matches("[\\w&&[^_]]{4}")); //true
System.out.println("2h_k".matches("[\\w&&[^_]]{4}")); //false
}
public static void main(String[] args) {
/*
编写正则表达式验证手机号码是否满足要求
编写正则表达式验证邮箱是否满足要求
编写正则表达式验证用户输入的电话号码是否满足要求
*/
//从左往右去写
//第一部分:1表示手机号码只能以1开头
//第二部分:[3-9]表示手机号码第二位只能是3-9之间
//第三部分:\\d{9}表示任意数字出现9次
String regex1="1[3-9]\\d{9}";
System.out.println("15392077658".matches(regex1)); //true
System.out.println("25392037668".matches(regex1)); //false
System.out.println("12392007688".matches(regex1)); //false
//座机号码
//020-23242 02122442 027-42424 0712-324234
//分为三部分
//第一部分:区号 0\\d{2,3}表示以0开头第二第三位可以是任意数字
//第二部分:- -?表示次数0次或1次
//第三部分:号码 [1-9]\\d{4,9}号码第一位不能以0开头,从第二位开始可以是任意长度,号码长度为5-10位
String regex2="0\\d{2,3}-?[1-9]\\d{4,9}";
System.out.println("020-23242".matches(regex2)); //true
//邮箱号码
//10000@qq.com xiyou@gmail.com dlei0009@pci.com.cn
//第一部分:@的左边 \\w+ 表示至少出现1次
//第二部分:@ @表示只能出现1次
//第三部分:
//3.1: .的左边 [\\w&&[^_]]{2,6}表示任意字母和数字出现6次不能出现_
//3.2 . \\.表示.
//3.3 .的右边 [a-zA-Z]{2,3}大写字母和小写字母都可以
String regex3="\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
System.out.println("grapefuritbin@gamil.com".matches(regex3)); //true
System.out.println("dlei0009@pci.com.cn".matches(regex3)); //true
//24小时的正则表达式
String regex4="([01]\\d||2[0-3])(:[0-5]\\d){2}";
//16:10:35
System.out.println("21:21:10".matches(regex4)); //true
}
public static void main(String[] args) {
/*
1.验证用户名是否满足要求
要求:大小写字母,数字,下划线一共是4-16位
2.身份证号码简单校验
要求:18位,前17位为任意数字,最后一位可以是数字和大小写的X
*/
//1用户名
String regex1="\\w{4,16}";
System.out.println("zhangsan_".matches(regex1)); //true
System.out.println("zhangsa.s+".matches(regex1)); //false
//2身份证号
String regex2="[1-9]\\d{16}[xX[0-9]]";
String regex3="[1-9]\\d{16}(x|X|\\d)";
String regex5="[1-9]\\d{16}((?i)x|\\d)";
System.out.println("43010220001111200x".matches(regex5)); //true
System.out.println("-------");
//忽略大小写的书写方式
//在匹配的时候忽略abc的大小写
String regex4="a((?i)b)c";
System.out.println("abc".matches(regex4)); //true
System.out.println("ABc".matches(regex4)); //false
System.out.println("aBC".matches(regex4)); //false
//3身份证号严格标准
//350524 2002 0114 2019
//前面6位:省市派出所等信息,第一位不能是0,后面5位是任意数字 [1-9]\\d{5}
//年前半段:18 19 20 (18|19|20)
//年的后半段:任意数字出现两次 \\d{2}
//月份: 01~09 10 11 12 (0[1-9]|1[0-2])
//日期: 01~30 (0[1-9]|[12]\d|30)
//后面4位: 任意数字出现3次,最后一位可以是大小写X或者数字 \d{3}[(?i)x\d]
String regex6="[1-9]\\d{5}(18||19||20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|30)\\d{3}[(?i)x\\d]";
System.out.println("35052420001124801x".matches(regex6)); //true
System.out.println("13013319851224801x".matches(regex6)); //true
System.out.println("350524200011248018".matches(regex6)); //true
}