您的位置:首页 > Web前端 > JavaScript

ES引用类型 之 Regexp正则表达式(摘至javaScript 高程3)

2018-02-01 16:46 579 查看
通过 new 关键词来定义 RegExp 对象。

var patt1 = new RegExp();
or
var pat = /^ $/;


RegExp 对象有 3 个方法:test()exec() 以及 compile()

test() 检索字符串中指定的值。返回 true 或 false。

exec() 检索字符串中指定的值。返回找到的值,并确定其位置。

compile() 编译正则表达式。

支持正则表达式的 String 对象的方法

search检索与正则表达式相匹配的值。
match找到一个或多个正则表达式的匹配。
replace替换与正则表达式匹配的子串。
split把字符串分割为字符串数组。
常用的数字正则(严格匹配)

正则含义
/ ^[1-9]\d*$ /匹配正整数
/ ^ -[1-9]\d* $ /匹配负整数
/ ^-?[1-9]\d*$ /匹配整数
/ ^[1-9]\d*|0$ /匹配非负整数(正整数 + 0)
/ ^-[1-9]\d*|0$ /匹配非正整数(负整数 + 0)
/ ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ /匹配正浮点数
/^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ /匹配负浮点数
/ ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ /匹配浮点数
/ ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ /匹配非负浮点数(正浮点数 + 0)
/ ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ /匹配非正浮点数(负浮点数 + 0)
/ ^[1-9][0-9]{4,} $ /匹配腾讯QQ号 ,腾讯QQ号从10000开始
/ ^\d{3}-\d{8}|\d{4}-\d{7} $ /匹配国内电话号码 如 0511-4405222 或 021-87888822
/ ^[1-9]\d{5}(?!\d) $ /匹配中国邮政编码
匹配身份证

中国的身份证为15位(一代)或18位(二代),区别在于二代证只是在一代证的第七位数字前加了19和在末尾加了一位验证码 ;将15位升级为18位,并解析18位号码构成(地址、生日、性别)

验证规则:

* 身份证15位编码规则:dddddd yymmdd xx p

* dddddd:6位地区编码

* yymmdd: 出生年(两位年)月日,如:910215

* xx: 顺序编码,系统产生,无法确定

* p: 性别,奇数为男,偶数为女

*

* 身份证18位编码规则:dddddd yyyymmdd xxx y

* dddddd:6位地区编码

* yyyymmdd: 出生年(四位年)月日,如:19910215

* xxx:顺序编码,系统产生,无法确定,奇数为男,偶数为女

* y: 校验码,该位数值可通过前17位计算获得

*

* 前17位号码加权因子为 Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ]

* 验证位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]

* 如果验证码恰好是10,为了保证身份证是十八位,那么第十八位将用X来代替

* 校验位计算公式:Y_P = mod( ∑(Ai×Wi),11 )

* i为身份证号码1…17 位; Y_P为校验码Y所在校验码数组位置

function isIdCardNo(idCard){
var idCard = $('#cardId').val();
//15位和18位身份证号码的正则表达式
var regIdCard=/^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/;
//如果通过该验证,说明身份证格式正确,但准确性还需计算
if(regIdCard.test(idCard)){
if(idCard.length == 18){
var idCardWi = new Array( 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ); //将前17位加权因子保存在数组里
var idCardY = new Array( 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ); //这是除以11后,可能产生的11位余数、验证码,也保存成数组
var idCardWiSum = 0; //用来保存前17位各自乖以加权因子后的总和
for(var i = 0;i < 17; i++){
idCardWiSum += idCard.substring(i,i+1)*idCardWi[i];
}
var idCardMod = idCardWiSum % 11;//计算出校验码所在数组的位置
var idCardLast = idCard.substring(17);//得到最后一位身份证号码

//如果等于2,则说明校验码是10,身份证号码最后一位应该是X
if(idCardMod == 2){
if( idCardLast == "X" || idCardLast == "x" ){
alert("恭喜通过验证啦!");
return true;
}else{
alert("身份证号码错误!");
return false;
}
}else{
//用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码
if( idCardLast == idCardY[idCardMod] ){
alert("恭喜通过验证啦!");
return true;
}else{
alert("身份证号码错误!");
return false;
}
}
}
}else{
alert("身份证格式不正确");
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: