正则表达式:
注意:
1.比如你要验证电话号码是否正确,要求是:以1开头,第2位是3,5,8,总共11位
正则表达式应该书写成 ^[1]+[3,8]+\d{9}$
package com.ld.num;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Telephone {
public static void main(String[] args){
//需要验证的手机号
String tel="18631721765";
//正则表达式
String reg ="^[1]+[3,8]+\d{9}$" ;
//编译正则表达式
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(tel);
// 字符串是否与正则表达式相匹配
boolean rs = matcher.matches();
System.out.println(rs);
}
}
运行之后提示如下错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
at com.ld.num.Telephone.main(Telephone.java:12)
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
at com.ld.num.Telephone.main(Telephone.java:12)
经过百度发现问题出在正则表达式上面个
应该将 正则表达式中的 ^[1]+[3,8]+\d{9}$ 改为 \\d
改完之后如下:
package com.ld.num;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Telephone {
public static void main(String[] args){
//需要验证的手机号
String tel="18631721765";
//正则表达式
String reg ="^[1]+[3,8]+\\d{9}$" ;
//编译正则表达式
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(tel);
// 字符串是否与正则表达式相匹配
boolean rs = matcher.matches();
System.out.println(rs);
}
}
运行结果为true:
但是电话号码一般为186... 132..... 159.....
所以进行改进为:
^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
代码为:
package com.ld.num;
public class Telephone {
public static void main(String[] args){
checkTel("18631721765");
}
private static void checkTel(String tel) {
//编译正则表达式
String reg ="^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$" ;
System.out.println(tel.matches(reg)?"合法":"非法");
}
结果为:
合法