表单验证之正则表达式
概述
做验证必然要用到正则表达式,没有基础的童鞋建议先读一下大神总结的《正则表达式30分钟入门教程》
各类验证规则及说明
1、手机号验证
首先要知道当前手机号的号码规则,中国三大运营商号码波段主要有:
(1). 移动号段:134 135 136 137 138 139 147 150 151 152 157 158 159 178 182 183 184 187 188
(2). 联通号段:130 131 132 145 155 156 171 175 176 185 186
(3). 电信号段:133 149 153 173 177 180 181 189
(4). 虚拟运营商: 170
因此设定手机号验证的正则表达式如下:
^(13[0-9]|15[012356789]|17[0135678]|18[0-9]|14[579])[0-9]{8}$
2、固话验证
固话格式主要包括(010)1234567-1234、010-1234567-1234、(010)1234567、010-1234567、1234567、12345678等格式,因此,设定手机号验证的正则表达式如下:
^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,8}(-\d{1,4})?$
3、身份证号码验证
由于第一代身份证号和第二代身份证号规则不同,因此设定不同的验证规则,
第一代身份证号15位数,验证表达式:
^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
第二代身份证18位数,验证表达式:
^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$
4、信用卡、银行卡验证
信用卡、银行卡的验证规则是根据“模10”算法而来,“模10”算法(lnhn算法)的规则如下:
1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
3、将奇数位总和加上偶数位总和,结果能被10整除则有效。
我国主流银行信用卡标准卡是16位卡号,借记卡一般是19位卡号,不完全是,因此以中国的卡号验证符合jQueryValidate验证规则。以下为JQuery Validate内置验证:
1 creditcard: function( value, element ) { 2 3 if ( this.optional( element ) ) { 4 5 return "dependency-mismatch"; 6 } 7 // accept only spaces, digits and dashes 8 if ( /[^0-9 \-]+/.test( value ) ) { 9 return false; 10 } 11 var nCheck = 0, 12 nDigit = 0, 13 bEven = false, 14 n, cDigit; 15 value = value.replace( /\D/g, "" ); 16 if ( value.length < 13 || value.length > 19 ) { 17 return false; 18 } 19 for ( n = value.length - 1; n >= 0; n--) { 20 cDigit = value.charAt( n ); 21 nDigit = parseInt( cDigit, 10 ); 22 if ( bEven ) { 23 if ( ( nDigit *= 2 ) > 9 ) { 24 nDigit -= 9; 25 } 26 } 27 nCheck += nDigit; 28 bEven = !bEven; 29 } 30 return ( nCheck % 10 ) === 0; 31 },
5、中文验证
^[\u4e00-\u9fa5]+$
6、中英文、数字或下划线
^[\u4e00-\u9fa5_a-zA-Z0-9]{1,20}$
7、6~20位数字或英文字母(多用于密码框验证)
^[0-9A-Za-z]{6,20}$
8、邮政编码
^[1-9]\d{5}(?!\d)$
9、Java中将yyyy/mm或者yyyy.mm转成yyyymm存入数据库
未完待续........