import java.util.Set
import java.util.regex.Matcher
import java.util.regex.Pattern
/**
* @author zcr
*
*/
public class CheckIfIsPhoneNumber
{
/**
* 获得电话号码的正则表达式:包括固定电话和移动电话
* 符合规则的号码:
* 1》、移动电话
* 86+‘-’+11位电话号码
* 86+11位正常的电话号码
* 11位正常电话号码a
* (+86) + 11位电话号码
* (86) + 11位电话号码
* 2》、固定电话
* 区号 + ‘-’ + 固定电话 + ‘-’ + 分机号
* 区号 + ‘-’ + 固定电话
* 区号 + 固定电话
* @return电话号码的正则表达式
*/
public static String isPhoneRegexp()
{
String regexp = ""
//能满足最长匹配,但无法完成国家区域号和电话号码之间有空格的情况
String mobilePhoneRegexp = "(?:(\\(\\+?86\\))((13[0-9]{1})|(15[0-9]{1})|(18[0,5-9]{1}))+\\d{8})|" +
"(?:86-?((13[0-9]{1})|(15[0-9]{1})|(18[0,5-9]{1}))+\\d{8})|" +
"(?:((13[0-9]{1})|(15[0-9]{1})|(18[0,5-9]{1}))+\\d{8})"
//System.out.println("regexp = " + mobilePhoneRegexp)
//固定电话正则表达式
String landlinePhoneRegexp = "(?:(\\(\\+?86\\))(0[0-9]{2,3}\\-?)?([2-9][0-9]{6,7})+(\\-[0-9]{1,4})?)|" +
"(?:(86-?)?(0[0-9]{2,3}\\-?)?([2-9][0-9]{6,7})+(\\-[0-9]{1,4})?)"
regexp += "(?:" + mobilePhoneRegexp + "|" + landlinePhoneRegexp +")"
return regexp
}
/**
* 从dataStr中获取出所有的电话号码(固话和移动电话),将其放入Set
* @param dataStr待查找的字符串
* @param phoneSetdataStr中的电话号码
*/
public static void getPhoneNumFromStrIntoSet(String dataStr,Set<String>phoneSet)
{
//获得固定电话和移动电话的正则表达式
String regexp = isPhoneRegexp()
System.out.println("Regexp = " + regexp)
Pattern pattern = Pattern.compile(regexp)
Matcher matcher = pattern.matcher(dataStr)
//找与该模式匹配的输入序列的下一个子序列
while (matcher.find())
{
//获取到之前查找到的字符串,并将其添加入set中
phoneSet.add(matcher.group())
}
//System.out.println(phoneSet)
}
}
java中如何提取一个字符串中的电话号码,先写出手机号码和固定号码的正则表达式,然后创建模式,获取到匹配器,从而刷选出符合要求的电话号码,如下:
import java.util.regex.Matcherimport java.util.regex.Pattern
public class TestC {
public static void main(String[] args){
//要提前号码的字符串
String str="n13977777777s18911111111你好15988888888hha0955-7777777sss0775-6678111"
//提取手机号码
checkCellphone(str)
//提取固定电话号码
checkTelephone(str)
}
/**
* 查询符合的手机号码
* @param str
*/
public static void checkCellphone(String str){
// 将给定的正则表达式编译到模式中
Pattern pattern = Pattern.compile("((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}")
// 创建匹配给定输入与此模式的匹配器。
Matcher matcher = pattern.matcher(str)
//查找字符串中是否有符合的子字符串
while(matcher.find()){
//查找到符合的即输出
System.out.println("查询到一个符合的手机号码:"+matcher.group())
}
}
/**
* 查询符合的固定电话
* @param str
*/
public static void checkTelephone(String str){
// 将给定的正则表达式编译到模式中
Pattern pattern = Pattern.compile("(0\\d{2}-\\d{8}(-\\d{1,4})?)|(0\\d{3}-\\d{7,8}(-\\d{1,4})?)")
// 创建匹配给定输入与此模式的匹配器。
Matcher matcher = pattern.matcher(str)
//查找字符串中是否有符合的子字符串
while(matcher.find()){
//查找到符合的即输出
System.out.println("查询到一个符合的固定号码:"+matcher.group())
}
}
结果:
查询到一个符合的手机号码:13977777777
查询到一个符合的手机号码:18911111111
查询到一个符合的手机号码:15988888888
查询到一个符合的固定号码:0955-7777777
查询到一个符合的固定号码:0775-6678111
可以通过输入公式进行提取,具体 *** 作的步骤如下:
工具/原材料
1、打开电脑找到并点击excel2019版新建工作表;
2、双击打开excel表格以后,为了更好的示范先在表格内编辑好有手机号的文字内容;
3、编辑好文字以后,先选中辅助列B列的单元格并输入公式:=MID(A1,FIND("1",A1),11);
4、在编辑栏里输入公式以后,在按“ctrl+回车键”此时B列选中的单元格内已经提取成功。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)