通过 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;
}
}