正则表达式的简单用法+利用正则表达式检验身份证号码格式
2015-12-14 11:27
281 查看
正则表达式最简单的用法就是用来判断一个字符串是否符合某种表达式,可以用正则表达式判断字符串是否属于电话号码,是否属于身份证号。。。。
使用正则表达式的步骤很简单:
首先:规定正则表达式,
然后:获取pattern,
接下来就可以进行匹配了,
通过举例来解释正则表达式的格式:
上述的正则表达式表示所匹配的字符串必须第一位为a-z之间的字符,后8位必须是0-9之间的字符
如果我把正则表达式改成如下的表示方式:
则匹配结果为:
将正则表达式写成如下形式:
匹配结果为
面试时经常会被问道如何判断是否为身份证号码????
首先要明白身份证号码的编码规则,然后根据编码规则去写正则表达式
身份证编码规则如下(身份证有15为何和18位,以18位身份证为例):
第1位和第2位:省,自治区,直辖市代码(有关取值可查看代码表);
第3位和第4位:地级市,盟,自治州代码(有关取值可查看代码表);
第5位和第6位:县,县级市,区代码(有关取值可查看代码表);
第7位到第10位:出生年(15位身份证出生年显示两位,
例如1992年出生,18位身份证显示1992,而15位则显示92);
第11位和第12位:出生月;
第13位和第14位:出生日;
第15位到第17位:顺序码,第17位若是男生则为单数,若是女生则为双数;
第18位:表示校验码,可以是0-9或者X;(15位身份证无校验码)
验证15位身份证号码的正则表达式为:
验证18位身份证号码的正则表达式为:
但是以上正则表达式验证的身份证号码只能说是符合身份证编码规则,不能确定身份证是否有效。。
以上都是一些很简单的 小例子
使用正则表达式的步骤很简单:
首先:规定正则表达式,
String matchString = "[a-z][0-9]{8}"
然后:获取pattern,
Pattern pattern = Pattern.compile(matchString);
接下来就可以进行匹配了,
Matcher matcher = pattern.matcher(charSequence); return matcher.matches();
通过举例来解释正则表达式的格式:
private boolean matchPattern(CharSequence charSequence){
String matchString = "[a-z][0-9]{8}";
Pattern pattern = Pattern.compile(matchString);
Matcher matcher = pattern.matcher(charSequence); return matcher.matches();
}
Log.i("tag", "a22222222" + matchPattern("a22222222")); Log.i("tag", "a2222222"+matchPattern("a2222222")); Log.i("tag", "az2222222"+matchPattern("az2222222")); Log.i("tag", "2a2222222"+matchPattern("2a2222222"));
匹配结果为: 12-14 11:29:16.392 28663-28663/com.example.yong.myfirstdemo I/tag﹕ a22222222true 12-14 11:29:16.392 28663-28663/com.example.yong.myfirstdemo I/tag﹕ a2222222false 12-14 11:29:16.393 28663-28663/com.example.yong.myfirstdemo I/tag﹕ az2222222false 12-14 11:29:16.393 28663-28663/com.example.yong.myfirstdemo I/tag﹕ 2a2222222false
上述的正则表达式表示所匹配的字符串必须第一位为a-z之间的字符,后8位必须是0-9之间的字符
如果我把正则表达式改成如下的表示方式:
String matchString = "[a-zA-Z][^0-8]{8}";
则匹配结果为:
12-14 11:41:49.296 32423-32423/com.example.yong.myfirstdemo I/tag﹕ a99999999匹配结果: true 12-14 11:41:49.297 32423-32423/com.example.yong.myfirstdemo I/tag﹕ aZ2222222匹配结果: false 12-14 11:41:49.297 32423-32423/com.example.yong.myfirstdemo I/tag﹕ A99999999匹配结果: true 12-14 11:41:49.297 32423-32423/com.example.yong.myfirstdemo I/tag﹕ A88888899匹配结果: false满足正则表达式要求的为:第一位为a-z和A-Z范围之间的取值,注意到[^...]表示后8位的取值是取0-8的补集,即后八位必须为9.
将正则表达式写成如下形式:
String matchString = "\\d";
匹配结果为
12-14 11:57:46.874 5752-5752/com.example.yong.myfirstdemo I/tag﹕ 9匹配结果: true 12-14 11:57:46.875 5752-5752/com.example.yong.myfirstdemo I/tag﹕ 8匹配结果: true 12-14 11:57:46.875 5752-5752/com.example.yong.myfirstdemo I/tag﹕ a8匹配结果: false 12-14 11:57:46.876 5752-5752/com.example.yong.myfirstdemo I/tag﹕ A8888899匹配结果: false
面试时经常会被问道如何判断是否为身份证号码????
首先要明白身份证号码的编码规则,然后根据编码规则去写正则表达式
身份证编码规则如下(身份证有15为何和18位,以18位身份证为例):
第1位和第2位:省,自治区,直辖市代码(有关取值可查看代码表);
第3位和第4位:地级市,盟,自治州代码(有关取值可查看代码表);
第5位和第6位:县,县级市,区代码(有关取值可查看代码表);
第7位到第10位:出生年(15位身份证出生年显示两位,
例如1992年出生,18位身份证显示1992,而15位则显示92);
第11位和第12位:出生月;
第13位和第14位:出生日;
第15位到第17位:顺序码,第17位若是男生则为单数,若是女生则为双数;
第18位:表示校验码,可以是0-9或者X;(15位身份证无校验码)
验证15位身份证号码的正则表达式为:
String matchString = "^[1-9]\\d{7}((0[1-9])||(1[0-2]))((0[1-9])||(1\\d)||(2\\d)||(3[0-1]))\\d{3}$";
验证18位身份证号码的正则表达式为:
String matchString2 = "^[1-9]\\d{5}[1-9]\\d{3}((0[1-9])||(1[0-2]))((0[1-9])||(1\\d)||(2\\d)||(3[0-1]))\\d{3}([0-9]||X)$";
但是以上正则表达式验证的身份证号码只能说是符合身份证编码规则,不能确定身份证是否有效。。
以上都是一些很简单的 小例子
相关文章推荐
- 动态规划:从新手到专家(转)
- Java安全(JCA/JSSE):数字证书与SSL
- 银行卡扫描(基于swift)
- transitionend 事件的兼容
- [转载]悲观锁定与乐观锁定
- JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
- 图形验证码的实现
- Activity使用Serializable传递对象实例
- 自定义TextView
- jsp页面显示数据库乱码
- Bitmap与Matrix旋转ImageView
- iOS 开发小技巧
- 单例常见的几种写法
- win7下运行nodejs的中文报错:Error: write EIO
- tnsnames.ora
- mmenu插件扩展的一个选择省市县
- 文本框的blur与change事件触发顺序
- PBS pro 有资源但作业排队的问题处理
- 项目适配iOS9遇到的一些问题及解决办法
- px 与 dp, sp换算公式?