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/
本文版权归作者和博客园共有,欢迎转载,但请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2010-04-08 19:29  RockyXiang  阅读(902)  评论(3编辑  收藏  举报