正则表达式的应用

开发工具与关键技术: VS MVC基础
作者:卢雅婷
撰写时间:2019/06/17

正则表达式的应用体现在很多方面-,比如身份证的验证、手机号码的验证、图片的验证、用户密码等等,所以今天我们就是从这个方面入手,重点讲身份证号码验证,了解正则表达式。
(注释:下面的身份证验证是引用老师代码的,我只是借此讲解一下正则表达式。)

首先验证身份证号(15位或18位数字)的正则表达式如下
:"^\d{15}|\d{18} " 。 验 证 一 年 的 12 个 月 : " ( 0 ? [ 1 − 9 ] ∣ 1 [ 0 − 2 ] ) "。 验证一年的12个月:"^(0?[1-9]|1[0-2]) "12"(0?[19]1[02])"正确格式为:“01"~"09"和"1"~"12”。

验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;“01"~"09"和"1"~"31”。
用正则表达式限制只能输入数字和英文:
οnkeyup="value=value.replace(/[\W]/g’’)”onbeforepaste=“clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^\d]/g,’’))”

这些都是身份证号的验证需要的要求要分15位数和18位数的身份证号验证,然而当我们真正开始写整一个方法是就大有不同了,因为身份证号数有15位数和18位数的,而且,有一些还可以英文字母结尾,这都要求验证到。
function idCardNo(value) {
//验证身份证号方法
下面json方式声明了数组,验证身份证号的开始两位数,11则表示其籍贯为北京,12则为天津的籍贯,等等。再声明下面的变量,idcard, Y, JYM,S, M;并且让idcard = value;

var area = { 11: “北京”, 12: “天津”, 13: “河北”, 14: “山西”, 15: “内蒙古”, 21: “辽宁”, 22: “吉林”, 23: “黑龙江”, 31: “上海”, 32: “江苏”, 33: “浙江”, 34: “安徽”, 35: “福建”, 36: “江西”, 37: “山东”, 41: “河南”, 42: “湖北”, 43: “湖南”, 44: “广东”, 45: “广西”, 46: “海南”, 50: “重庆”, 51: “四川”, 52: “贵州”, 53: “云南”, 54: “西藏”, 61: “陕西”, 62: “甘肃”, 63: “青海”, 64: “宁夏”, 65: “xinjiang”, 71: “台湾”, 81: “香港”, 82: “澳门”, 91: “国外” }
var idcard, Y, JYM;
var idcard = value;
var S, M;
var idcard_array = new Array();
idcard_array = idcard.split("");
split是截取的方法,截取一段字符先判断。
判断area[parseInt(idcard.substr(0, 2))] == null若为空,则返回false,接着用switch case语句判断,若身份证号码为15位数的,就进行下面的判断,否则进行else的语句
if (area[parseInt(idcard.substr(0, 2))] == null) return false;
switch (idcard.length) {
case 15://开始验证15位数的身份证号
if ((parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0 || ((parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0)) {
ereg = /1[0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}KaTeX parse error: Expected 'EOF', got '}' at position 124: …思。 }̲ el…/; //测试出生日期的合法性
}
将经过循环的数据进行判断,若res = true,则跳出循环验证的身份证号正确。
if (ereg.test(idcard))
//return Errors[0];
var res = true;
else
//return Errors[2];
var res = false;
return res;
break;
case 18:
if (parseInt(idcard.substr(6, 4)) % 4 == 0 || (parseInt(idcard.substr(6, 4)) % 100 == 0 && parseInt(idcard.substr(6, 4)) % 4 == 0)) {
ereg = /2[0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]KaTeX parse error: Expected 'EOF', got '}' at position 35: …式 }̲ else { …/; //平年出生日期的合法性正则表达式
}
if (ereg.test(idcard)) {
S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 + (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 + (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 + (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 + (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 + (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 + parseInt(idcard_array[7]) * 1 + parseInt(idcard_array[8]) * 6 + parseInt(idcard_array[9]) * 3;
Y = S % 11;
M = “F”;
JYM = “10X98765432”;
M = JYM.substr(Y, 1);
若上面的判断为false则,直接返回false跳出循环,否则继续
判断若M== idcard_array[17],则验证正确,返回true,else则身份证有误,返回false,下面有两个else,第一个是验证不正确的,第二个则是身份证号不为15或18的。
if (M == idcard_array[17])
//return Errors[0];
var res = true;
else
//return Errors[3];
var res = false;
}
else
//return Errors[2];
res = false;
return res;
break;
default:
res = false;
return res;
break;
};
}
正则表达式验证身份证就此说完了,当然不同的人写的验证方法大不相同,这个验证方法也是有缺点的,还有几个方面尚未完善,所以这个案例仅做参考说明身份证验证的大体思路及方法,并不推荐使用。鄙人学之尚浅,若有不对之处请给予矫正,感谢阅读。


  1. 1-9 ↩︎

  2. 1-9 ↩︎

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值