1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 手机号码 邮箱匹配正则表达式java实现练手

手机号码 邮箱匹配正则表达式java实现练手

时间:2021-08-06 01:07:05

相关推荐

手机号码 邮箱匹配正则表达式java实现练手

概念:正则表达式就是用某种模式去匹配一类字符串的一个公式。它由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。

正则表达式的基础语法为: “^([]{})([]{})([]{})$”。

大致意思是:正则字符串 = “开始([包含内容]{长度})([包含内容]{长度})([包含内容]{长度})结束”。 今天我学习了一下简单的基础知识,尝试写一下手机号码和邮箱的正则匹配练习一下。

一、手机号码正则表达式:

手机号码一般为1开头11位数字,其正则匹配表达式可为:1[0-9]{10}

[0-9]表示0到9之间任意一个数字(也可以用\d表示),{10}表示前面的表达式匹配10次;java字符串匹配时增加表达开始和结束的元字符^$.

Java代码测试如下:

/** * 判断是否为正确的手机格式* @param str * @return boolean */ public static boolean isMobile0(String str){if(str == null || "".equals(str)){ return false;}return str.matches("^1[0-9]{10}$"); }public static void main (String[] str){String mobile = "12345678901";boolean y = isMobile0(mobile);System.out.println(y);}

运行结果为:true

这里主要数字串满足1开头11为数字即可,存在比较大的匹配隐患。

进阶1:国内的手机号码开头号码段有以下:

移动号码段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147

联通号码段:130、131、132、136、185、186、145

电信号码段:133、153、180、189

即开头为13|14|15|18四种,|表示或的意思;再细致一些则有(13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]),Java代码测试如下:

/** * 判断是否为正确的手机格式* @param str * @return boolean */ public static boolean isMobile0(String str){if(str == null || "".equals(str)){ return false;}//return str.matches("^1[0-9]{10}$");//return str.matches("^1\\d{10}$");//return str.matches("^(13|14|15|18)\\d{9}$"); //return str.matches("^((13[0-9])|(14[5|7])|(15[0-3])|(15[5-9])|(18[0,5-9]))\\d{8}$"); return str.matches("^1((3[0-9])|(4[5|7])|(5([0-3]|[5-9]))|(8[0,5-9]))\\d{8}$");}public static void main (String[] str){String mobile = "12345678901";String mobile2 = "13660188000";boolean n = isMobile0(mobile);System.out.println(n);boolean y = isMobile0(mobile2);System.out.println(y);}

返回结果为:false true;

第一个String字段因为号段不对被筛选出来了。

进阶2:增加了国字区号,比如我国+86的号码如何判断

在原有的基础前面,增加+86或86的判断,用?表示匹配一次或0次

/** * 判断是否为正确的手机格式* @param str * @return boolean */ public static boolean isMobile0(String str){if(str == null || "".equals(str)){ return false;}//return str.matches("^1[0-9]{10}$");//return str.matches("^1\\d{10}$");//return str.matches("^(13|14|15|18)\\d{9}$"); //return str.matches("^((13[0-9])|(14[5|7])|(15[0-3])|(15[5-9])|(18[0,5-9]))\\d{8}$"); //return str.matches("^1((3[0-9])|(4[5|7])|(5([0-3]|[5-9]))|(8[0,5-9]))\\d{8}$");return str.matches("^(\\+86|86)?1((3[0-9])|(4[5|7])|(5([0-3]|[5-9]))|(8[0,5-9]))\\d{8}$");}public static void main (String[] str){String mobile = "12345678901";String mobile2 = "13660188000";String mobile3 = "+8613660188000";String mobile4 = "8613660188000";System.out.println(isMobile0(mobile));System.out.println(isMobile0(mobile2));System.out.println(isMobile0(mobile3));System.out.println(isMobile0(mobile4));}

测试结果为:false true true true;

二、手机号码正则表达式

邮箱正常格式为:用户名@域名;

用户名分析:用户名一般由英文字母,中划线,下划线,数字等组成,由此确定正则表达式可为[0-9a-zA-Z-_]+;

而正则表达式有\w可用于匹配包括下划线的单词字符,即\w 等价于 [0-9a-zA-Z_],上式可以表达为 [\w-](java中要注意转义);

域名分析:国际规定域名格式[N级域名][三级域名.]二级域名.顶级域名;至少有两级域名;而域名的表达也可以用[\w-]表示。

那么邮箱的匹配正则表达式可为:^[\w-]+@[\w-]+([.][\w-]+)+$

考虑转义字符等,在java中的实现和测试是:

/** * 判断是否为正确的邮件格式 * @param str * @return boolean */ public static boolean isEmail(String str){ if(str == null || "".equals(str)){ return false;}return str.matches("^[\\w-]+@[\\w-]+(\\.[\\w-]+)+$"); } public static void main (String[] str){String email1 = "abc2_-@";String email2 = "a@";System.out.println(isEmail(email1));System.out.println(isEmail(email2));}

结果返回 true false

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。