<!--

/**
 * <p>Title: 公共实用工具(客户端检查)</p>
 * <p>Description: 客户端录入公用正则表达式,验证模块：检验字符串、数值（包括小数位数检查）、邮件地址、日期、电话、邮编、IP地址等是否有效，字符串替换、查找、中英文字串长度检查等。</p>
 * <p>Copyright: Copyright (c) 2001</p>
 * <p>Company: 联想智软</p>
 * @author 颜伟文
 * @version 1.0
 */

var validAlpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var validDigit = "0123456789";
var validSign = "-";
var validDecimalChar = ".";
var validStringChar = ",.()-:/";
var unvalidChar = "'`";

function trim(str)
{
	var i = 0;
	var len = str.length;
	j = len - 1;
	flagbegin = true;    
	flagend = true;		    

	while (flagbegin){
	    if (str.charAt(i) == " "){
	        i = i + 1;
	        flagbegin = true;
	    }
	    else flagbegin = false;
	}	

	while (flagend){
	    if (str.charAt(j) == " "){
	        j = j - 1;
	        flagend = true;
	    }
	    else flagend = false;
	}

	if (i <= j) trimstr = str.substring(i, j + 1);
	else trimstr = "";	

	return trimstr;
}


/*

判断字符串是否为空

*/
function isEmpty(s)
{
	s = trim(s);
	return ((s == null) || (s.length == 0));
}


/*

检查字符串是否为字母与数字

*/
function isString(s){

	if (isEmpty(s)) return true;
	
	var validString = validAlpha + validDigit;	
	for (var i = 0; i < s.length; i++){
		if (validString.indexOf(s.charAt(i)) == -1) return false;
	}
	return true;
}


/*

检查字符串是否为字母

*/
function isAlpha(s){
    if (isEmpty(s)) return true;
    
    for (var i = 0; i < s.length; i++){
		if (validAlpha.indexOf(s.charAt(i)) == -1) return false;
    }
    return true;
}

/*

检查字符串是否包括无效字符

*/
function isUnValidString(s){

	if (isEmpty(s)) return true;
	
	var unvalidString = unvalidChar;	
	for (var i = 0; i < s.length; i++){
		if (unvalidString.indexOf(s.charAt(i)) != -1) return false;
	}
	return true;
}



/*

检查字符串是否正确(包括validChar,字母与数字)

*/
function isValidString(s){

	if (isEmpty(s)) return true;
	var validString = validAlpha + validDigit + validChar;	

	for (var i = 0; i < s.length; i++){
		if (validString.indexOf(s.charAt(i)) == -1) return false;
	}
	return true;
}


/*

检查字符串是否为整数

*/
function isInteger(s) {   

    if (isEmpty(s)) return true;
	var validString = validDigit + validSign;

    for (var i = 0; i < s.length; i++){
		if (validString.indexOf(s.charAt(i)) == - 1) return false;
    }
    return true;
}


/*

检查字符串是否为小数

*/
function isDecimal(s) {   		
    if (isEmpty(s)) return true;
	var validString = validDigit + validDecimalChar;

    for (var i = 0; i < s.length; i++){
		if (validString.indexOf(s.charAt(i)) == - 1) return false;
    }
    return true;
}


/*

判断电话号码是否正确合法

*/
function isPhone(s){

	if (isEmpty(s)) return true;
	var validString = "()、.:-" + validDigit;	

	if (s.length > 20) return false;

	for (var i = 0; i < s.length; i++){
		if (validString.indexOf(s.charAt(i)) == -1) return false;
	}
	return true;
}



/*

判断邮政编码是否正确

*/
function isPostCode(s){
	if (s.length != 6) return false;
	if (! isInteger(s)) return false;	
	return true;
}



/*

判断电子邮件地址是否正确

*/
function isEmail(s){
	if (isEmpty(s)) return true;
	
	var validString = validAlpha + validDigit;
	var validEmail = validString + "@.-_";
	var v_email = s;
	var v_email2 = s.substr(s.indexOf("@") + 1);
	
	if (validString.indexOf(s.charAt(0)) == -1) return false;
	for (var i = 0; i < s.length; i++){
		if (validEmail.indexOf(s.charAt(i)) == -1) return false;
	}
	
	if ((v_email.indexOf("@") == -1) ||
	    (v_email.indexOf("@") == 0)  ||
	    (v_email.indexOf("@") != v_email.lastIndexOf("@")) ||
	    (v_email2.indexOf(".") == -1)  ||  
	    (v_email2.indexOf(".") == 0) ||
	    ((v_email.indexOf(".") + 1) == v_email.length)) return false;
	else return true;

	return true;
}




function isIntegerInRange (s, a, b)
{
    if (! isInteger(s)) return false;

    var num = parseInt (s);
    return ((num >= a) && (num <= b));
}

function isYear (s)
{   
	if (isEmpty(s)) return false;
	if (s.length != 4) return false;
    if (! isInteger(s)) return false;
    if (! isIntegerInRange(s, 1900, 2100)) return false;
    
	return true;    
}

function isMonth (s)
{
	if (isEmpty(s)) return false;
	if (! isInteger(s)) return false;
    return isIntegerInRange (s, 1, 12);
}

function isDay (s)
{   
	if (isEmpty(s)) return false;
	if (! isInteger(s)) return false;
    return isIntegerInRange (s, 1, 31);
}

function daysInFebruary (year)
{
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

function daysInMonth(year, month)
{
	if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10|| month == 12) return 31;
	if (month == 4 || month == 6 || month == 9 || month == 11) return 30;
	if (month == 2) return daysInFebruary(year);
}



/*

检查字符串是否为有效的日期

*/
function isDate(s) 
{
	if (isEmpty(s)) return true;
	s = trim(s)
	if (s.length< 8) return false;
	var datepart = s.split("-");
	if ((datepart.length != 3)) return false;
	var year = datepart[0];
	var month = datepart[1];
	var day = datepart[2];
	if (day.length > 2) return false;
	if (month.charAt(0)=="0") month=month.charAt(1);
	if (day.charAt(0)=="0") day=day.charAt(1);
	
    if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false;

    var intYear = parseInt(year, 10);
    var intMonth = parseInt(month, 10);
    var intDay = parseInt(day, 10);
	
    if (intDay > daysInMonth(intYear, intMonth)) return false; 
    return true;
}



/*

检查字符串长度是否超长，空返回真
参数说明：
s,为要检查的字符串
a,为字符串的最大长度

*/
function isOverTopLen(s,a)
{
 if (isEmpty(s)) return true;
 if (! isInteger(a)) return false;

 var i,str1,str2,str3,nLen;
 str1 = s.value;
 nLen = 0;
 
 for(i=1;i<=str1.length;i++) {
	str2=str1.substring(i-1,i)
	str3=escape(str2);
	if(str3.length>3){
		nLen = nLen + 2;
	}else {
		nLen = nLen + 1;
	}
 }
 
 var num = parseInt (a);
 return num >= nLen;
}


/*

检查数值是否有效，空返回真
参数说明：
s,为要检查的数值
a,为最大整数位数
b,为最大小数位数

*/
function isValidDecimal(s,a,b)
{   		
    if (isEmpty(s)) return true;
	var validString = validDigit + validDecimalChar;

    for (var i = 0; i < s.length; i++){
		if (validString.indexOf(s.charAt(i)) == - 1) return false;
    } 

	var index = s.indexOf('.');
	if (index = -1) return true;
	if (s.indexOf('.',index+1) != -1) return false;
    if (a < index) return false;   
    if (b < (s.length-(index+1)))  return false;
    
    return true;
}



/*

替换字符串

*/
function replaceStr(s1,s2,s3)
{
 var len1 , len2 , i;
 var str1 , str2 ; 
 str1 = s1;
 len1 = str1.length;
 len2 = s2.length;
 if (len2 > len1) return s1;
 
 for (i=1;i<= len1-len2+1 ; i++) {   
   str2 = str1.substring(i-1,i-1+len2);
   if (str2 == s2) {
		str1 = str1.substring(0,i-1) + s3 + str1.substring(i+len2-1,len1 );
		i = 0;
		len1 = str1.length;
    }
 }
 return str1;
}



/*

查找字符串

*/
function findStr(s1,s2) 
{
 var len1 , len2 , i, flag;
 var str1 , str2 ; 
 str1 = s1;
 len1 = str1.length;
 len2 = s2.length;
 if (len2==0 || len1==0)  return 0;
 flag = false;
 if (len2 > len1) return 0;
 
 for (i=1;i<= len1-len2+1 ; i++) {
   
   str2 = str1.substring(i-1,i-1+len2);
   if (str2 == s2) {
     flag = true;
     break;
    }
 }
 if (flag) 
	return i;
 else
	return 0;
}


/*

检查IP地址是否合法

*/
function checkIPAddress(s) {   
   var reSpaceCheck = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
   var passedTest = false;
   
   if (reSpaceCheck.test(s)) {
		s.match(reSpaceCheck);
		if (RegExp.$1 <= 255 && RegExp.$1 >= 0 
			&& RegExp.$2 <= 255 && RegExp.$2 >= 0 
			&& RegExp.$3 <= 255 && RegExp.$3 >= 0 
			&& RegExp.$4 <= 255 && RegExp.$4 >= 0) {
			passedTest = true;
		}
   }   
   return passedTest;
}


function isPosInteger( strVal ) {
	if(!(isInteger2(strVal))) return false;
	else if(strVal<=0) return false;
	else return true;
}

function isInteger2( strVal ) {
	var bNum = isNumeric(strVal);
	if(bNum) {
		if(parseInt(strVal,10) != strVal) return false;
	}
	return bNum;
}
function isNumeric( strVal ) {
	if(isNaN( strVal * 1)) return false;
	else return true;
}
//-->
