Javascript与正则表达式个人总结与收录--封装js验证类

   总结了一些常见的表单验证类的操作,供以后备用。。。

 
  
var validateUtil = new Object();

validateUtil.isEmpty
= function (id) {
// / <summary>检测元素</summary>
// / <param name="id">元素id</param>
var str = stringUtil.trim($(id).value);
if (str.length == 0 ) {
return true ;
}
return false ;
}

validateUtil.isContainChinese
= function (str) {
// / <summary>检测字符串中是否有汉字</summary>
var reg = / [\u4e00-\u9fa5] / ;
return reg.test(str);
}

validateUtil.isValidUserName
= function (strUserName) {
// / <summary>检测用户名,长度在6到15位之间,且只能由中英文、数字、-、_构成,
///中文算两个字符 < / summary>
if (stringUtil.len(strUserName) >= 6 && stringUtil.len(strUserName) <= 15 ) {
var reg = / ([\u4e00-\u9fa5]|[\w-]) / g;
return reg.test(strUserName);
}
return false ;
}

validateUtil.isValidPassword
= function (strPass) {
// / <summary>检测密码,密码长度在6到15位之间,且只能由英文字母、数字、-、_构成,
///且首位必须是英文字母 < / summary>
var reg = / ^[a-zA-Z][\w-]{5,15}$ / ;
return reg.test(strPass);
}

validateUtil.isValidEmail
= function (strEmail) {
// / <summary>检测Email地址是否合法</summary>
var reg = / \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* / ;
return reg.test(strEmail);
}

validateUtil.isValidDate
= function (strDate, separator) {
// / <summary>检测日期是否合法</summary>
// / <param name="separator">可选项:年月日之间的分隔符,只可以为'-'或'/',
默认为 ' - ' < / param>
if (strDate.length == 0 ) {
return false ;
}
// 根据正则表达式判断基本的日期格式是否正确:(1|2)xxx-xx-xx
if (separator == ' / ' ) {
var reg = / ^(1|2)([\d]){3}\ / [\d]{ 2 }\ / [\d]{2} / ;
if ( ! reg.test(strDate)) {
return false ;
}
}
else {
var reg = / ^(1|2)([\d]){3}-[\d]{2}-[\d]{2} / ;
if ( ! reg.test(strDate)) {
return false ;
}
}
// 去除日期中的 '-' 或 '/' 分隔符
var strFormatDate = strDate.replace( / (-|\ / ) / g, '');
var year, month, day;
// 取得年月份的具体值
year = isIE ?
strFormatDate.substr(
0 , 4 ) : strFormatDate.substr( 0 , 4 ) + 1900 ;
month
= strFormatDate.substr( 4 , 2 );
day
= strFormatDate.substr( 6 , 2 );
// 检测年月日的合法性
return checkDate(year, month, day);
}

validateUtil.isValidCid
= function (strId) {
// / <summary>检测身份证号码是否合法,若为15位则验证成功后返回转换为18位的身份证号,
///若为18位则验证成功后则返回true < / summary>
strId = strId.toUpperCase();
// 判断基本的身份证号码格式是否正确:15位时全为数字,18位前17位为数字,
最后一位是校验位,可能为数字或字符X。
if ( ! ( / (^\d{15}$)|(^\d{17}([0-9]|X)$) / .test(strId))) {
return false ;
}
// 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10
// 下面分别分析出生日期和校验位
var strIdLength = strId.length;
var reg;
var year, month, day;
if (strIdLength == 15 ) {
reg
= new RegExp( / ^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$ / );
// 如"123456789123456",则arrSplit为123456789123456,123456,78,91,23,456
var arrSplit = strId.match(reg);

// 检查生日日期是否正确
var year = ' 19 ' + arrSplit[ 2 ];
var month = arrSplit[ 3 ];
var day = arrSplit[ 4 ];
if ( ! checkDate(year, month, day)) {
// 输入的身份证号里出生日期不对
return false ;
}
else {
// 将15位身份证转成18位
return strId.substr( 0 , 6 ) + ' 19 ' + strId.substr( 6 , 9 ) + ' X ' ;
}
}
if (strIdLength == 18 ) {
reg
= new RegExp( / ^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$ / );
// 如"12345678912345678X",则arrSplit为12345678912345678X,123456,7891,23,
45 , 678 ,X
var arrSplit = strId.match(reg);

// 检查生日日期是否正确
var year = ' 19 ' + arrSplit[ 2 ];
var month = arrSplit[ 3 ];
var day = arrSplit[ 4 ];
if ( ! checkDate(year, month, day)) {
// 输入的身份证号里出生日期不对
return false ;
}
else {
// 检验18位身份证的校验码是否正确。
// 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
var validStrId;
var arrInt = new Array( 7 , 9 , 10 , 5 , 8 , 4 , 2 , 1 , 6 , 3 , 7 , 9 , 10 , 5 ,
8 , 4 , 2 );
var arrCh = new Array( ' 1 ' , ' 0 ' , ' X ' , ' 9 ' , ' 8 ' , ' 7 ' , ' 6 ' , ' 5 ' , ' 4 ' ,
' 3 ' , ' 2 ' );
var nTemp = 0 , i;
for (i = 0 ; i < 17 ; i ++ ) {
nTemp
+= strId[i] * arrInt[i];
}
validStrId
= arrCh[nTemp % 11 ];
if (validStrId != strId.substr( 17 , 1 )) {
// 18位身份证的校验码不正确,最后以为应该是+ validStrId);
return false ;
}
}
}
return true ;
}

function checkDate(year, month, day) {
// 月份不可大于12,天数不可大于31
if (parseInt(month, 10 ) <= 0 || parseInt(month, 10 ) > 12 ||
parseInt(day,
10 ) <= 0 || parseInt(day, 10 ) > 31 ) {
return false ;
}
// 判断是否是闰年
if ((year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0 ) {
// 闰年2月不可大于29天
if (parseInt(month, 10 ) == 2 ) {
if (parseInt(day, 10 ) > 29 ) {
return false ;
}
}
}
else {
// 平年2月不可大于28天
if (parseInt(month, 10 ) == 2 ) {
if (parseInt(day, 10 ) > 28 ) {
return false ;
}
}
}
var monthArr = new Array( 1 , 3 , 5 , 7 , 8 , 10 , 12 );
for ( var i = 0 ; i < monthArr.length; i ++ ) {
// “大月”天数不可大于31
if (monthArr[i] == parseInt(month, 10 )) {
if (parseInt(day, 10 ) > 31 ) {
return false ;
}
}
else {
// “小月”天数不可大于30
if (parseInt(day, 10 ) > 30 ) {
return false ;
}
}
}
return true ;
}


作者:Rocky翔
出处:http://www.cnblogs.com/RockyMyx/
本文版权归作者和博客园共有,欢迎转载,但请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/RockyMyx/archive/2010/04/08/RegularExpression-Validation.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值