
//客户端数据验证相关函数
//验证变量是否为空白的字符串
function IsVacantStr(inVar)
{
if(inVar == null || inVar == "")
return true;
else
return false;
}

//去除字符串两端的空隔
function trim(inVar)
{
var str;

str = inVar
str = ltrim(str);
str = rtrim(str);
return str;
}

//去除字符串左边的空隔
function ltrim(inVar)
{
var i, str, strLength;

str = inVar.toString();
strLength = str.length;
i = 0;
while(i < strLength)
{
if(str.charAt(i) != " ")
break;
i++;
}
return str.substring(i, strLength)
}

//去除字符串右边的空隔
function rtrim(inVar)
{
var i, str, strLength;

str = inVar.toString();
strLength = str.length;
i = strLength - 1;
while(i >= 0)
{
if(str.charAt(i) != " ")
break;
i--;
}
return str.substring(0, i + 1)
}



/********************************************************************************************
*函数名:validateInput
*功能描述:验证输入的字符串是否符合validatePattern的设置
*参数:
* inputObj Input到的对像
* validatePattern 验证的正则表达式模式
* inputStr 要验证的字符串
*返回值:如果字符串符合validatePattern的设置则返回true，否则返回false。
*********************************************************************************************/
function validateInput(inputObj, validatePattern, inputStr)
{
var docSel = document.selection.createRange()
if (docSel.parentElement().tagName != "INPUT") return false
oSel = docSel.duplicate()
oSel.text = ""
var srcRange = inputObj.createTextRange()
oSel.setEndPoint("StartToStart", srcRange)
var str = oSel.text + inputStr + srcRange.text.substr(oSel.text.length)
return validatePattern.test(str)
}



/********************************************************************************************
*函数名:vIsUserName
*功能描述:验证字符串是否符合用户名命名规则
*参数:
* inVar 要验证的字符串
*返回值:如果符合用户名规则则返回true，否则返回false。
*********************************************************************************************/
function vIsUserName(inVar)
{
if(IsVacantStr(inVar)) return true;
return /^[A-Za-z_]{1}[A-Za-z0-9_]{3,15}$/gi.test(inVar);
}



/********************************************************************************************
*函数名:vIsNotEmpty
*功能描述:验证字符串是否为非空字符串
*参数:
* inVar 要验证的字符串
*返回值:如果字符串为非空则返回true，否则返回false。
*********************************************************************************************/
function vIsNotEmpty(inVar)
{
var Str;

Str = inVar.toString();
if(Str == "")
return false;
else
return true;
}



/********************************************************************************************
'函数名:vIsNotNull
'功能描述:验证字符串是否为非无效字符串
'参数:
' inVar 要验证的字符串
'返回值:如果字符串为非无效的则返回true，否则返回false。
*********************************************************************************************/
function vIsNotNull(inVar)
{
var Str;

Str = inVar.toString();
if(trim(Str) == "")
return false;
else
return true;
}



/********************************************************************************************
*函数名:vIsCoincidentLength
*功能描述:验证字符串是否符合规定的长度范围之内
*参数:
* inVar 要验证的字符串
* minLength 最小字符串
* maxLength 最大字符串
*返回值:如果字符串是符合规定的长度范围之内则返回true，否则返回false。
*********************************************************************************************/
function vIsCoincidentLength(inVar, minLength, maxLength)
{
var Str, StrLength, tempLength;
var returnVal = true;

Str = inVar.toString();
StrLength = Str.length;
if(minLength == "" || minLength == null) minLength = null;
if(maxLength == "" || maxLength == null) maxLength = null;

if(minLength > maxLength && minLength != null && maxLength != null)
{
tempLength = minLength
minLength = maxLength
maxLength = tempLength
}

if(minLength != null && StrLength < minLength)
returnVal = returnVal && false;
if(maxLength != null && StrLength > maxLength)
returnVal = returnVal && false;
return returnVal;
}



/********************************************************************************************
*函数名:String_lengthB
*功能描述:返回字符串所占的字节数
*返回值:字符串所占的字节数。
*********************************************************************************************/
function String_lengthB()
{
var i, strLengthB, strLength, charCode;

strLength = this.length;
strLengthB = 0;
for(i = 0; i < strLength; i++)
{
charCode = this.charCodeAt(i);
if(charCode < 0 || charCode > 255)
strLengthB += 2;
else
strLengthB += 1;
}
return strLengthB;
}
//将String_lengthB添加到String对像的原型
String.prototype.lengthB = String_lengthB;


/********************************************************************************************
*函数名:vIsCoincidentLengthB
*功能描述:验证字符串是否符合规定的长度范围之内,以字节为单位
*参数:
* inVar 要验证的字符串
* minLength 最小字符串
* maxLength 最大字符串
*返回值:如果字符串是符合规定的长度范围之内则返回True，否则返回False。
*********************************************************************************************/
function vIsCoincidentLengthB(inVar, minLength, maxLength)
{
var Str, StrLength, tempLength;
var returnVal = true;

Str = inVar.toString();
StrLength = Str.lengthB();

if(minLength == "" || minLength == null) minLength = null;
if(maxLength == "" || maxLength == null) maxLength = null;

if(minLength > maxLength && minLength != null && maxLength != null)
{
tempLength = minLength
minLength = maxLength
maxLength = tempLength
}

if(minLength != null && StrLength < minLength)
returnVal = returnVal && false;
if(maxLength != null && StrLength > maxLength)
returnVal = returnVal && false;
return returnVal;
}



/********************************************************************************************
*函数名:vIsEmail
*功能描述:验证字符串是否符合Email格式
*参数:
* inVar 要验证的字符串
*返回值:如果字符串是符合Email格式则返回true，否则返回false。
*********************************************************************************************/
function vIsEmail(inVar)
{
if(IsVacantStr(inVar)) return true;
return /^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*[0-9a-zA-Z]+))@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2}|net|NET|com|COM|gov|GOV|mil|MIL|org|ORG|edu|EDU|int|INT)$/gi.test(inVar);
}



/********************************************************************************************
*函数名:vIsNumeric
*功能描述:验证字符串是否符合数字的格式
*参数:
* inVar 要验证的字符串
*返回值:如果字符串是符合数字格式则返回true，否则返回false。
*********************************************************************************************/
function vIsNumeric(inVar)
{
if(IsVacantStr(inVar)) return true;
return /^-?[0-9]+(\.[0-9]*)?$/gi.test(inVar);
}



/********************************************************************************************
*函数名:vIsDate
*功能描述:验证字符串是否符合日期的格式
*参数:
* inVar 要验证的字符串
*返回值:如果字符串是符合日期格式则返回true，否则返回false。
*********************************************************************************************/
function vIsDate(inVar)
{
var returnVal;
if(IsVacantStr(inVar)) return true;
returnVal = !(isNaN(Date.parse(inVar.replace("-", "/"))));
if(!returnVal)
returnVal = !(isNaN(Date.parse(inVar.replace("-", "/") + "/1")));
return returnVal;
}



/********************************************************************************************
*函数名:vIsAreaNumber
*功能描述:验证字符串是否符合电话区号的格式
*参数:
* inVar 要验证的字符串
*返回值:如果字符串是符合电话区号的格式则返回true，否则返回false。
*********************************************************************************************/
function vIsAreaNumber(inVar)
{
if(IsVacantStr(inVar)) return true;
return /^0[0-9]{2,3}$/gi.test(inVar);
}



/********************************************************************************************
*函数名:vIsPhone
*功能描述:验证字符串是否符合电话号码的格式
*参数:
* inVar 要验证的字符串
*返回值:如果字符串是符合电话号码的格式则返回true，否则返回false。
*********************************************************************************************/
function vIsPhone(inVar)
{
if(IsVacantStr(inVar)) return true;
return /^((0[0-9]{2,3}[- \._]?)*[0-9]{6,10})|([0-9]{10,20})$/gi.test(inVar);
}



/********************************************************************************************
*函数名:vIsHandset
*功能描述:验证字符串是否符合手机号码的格式
*参数:
* inVar 要验证的字符串
*返回值:如果字符串是符合手机号码的格式则返回true，否则返回false。
*********************************************************************************************/
function vIsHandset(inVar)
{
if(IsVacantStr(inVar)) return true;
return /^[0-9]{10,20}$/gi.test(inVar);
}



/********************************************************************************************
*函数名:vIsChinese
*功能描述:验证字符串是否为中文
*参数:
* inVar 要验证的字符串
*返回值:如果字符串是中文则返回true，否则返回false。
*********************************************************************************************/
function vIsChinese(inVar)
{
var i, Str, returnVal, charCode;

Str = inVar;
returnVal = true;
for(i = 0; i < Str.length; i++)
{
charCode = Str.charCodeAt(i)
returnVal = returnVal && (charCode < 0 || charCode > 255);
}
return returnVal;
}



/********************************************************************************************
*函数名:vIsEnglish
*功能描述:验证字符串是否为英文字符
*参数:
* inVar 要验证的字符串
*返回值:如果字符串是英文字符则返回true，否则返回false。
*********************************************************************************************/
function vIsEnglish(inVar)
{
var i, Str, returnVal, charCode;

Str = inVar;
returnVal = true;
for(i = 0; i < Str.length; i++)
{
charCode = Str.charCodeAt(i)
returnVal = returnVal && (charCode >= 0 && charCode <= 255);
}
return returnVal;
}



/********************************************************************************************
*函数名:vIsSelect
*功能描述:验证控件是否选定
*参数:
* control 要验证的控件
*返回值:如果控件选定则返回true，否则返回false。
*********************************************************************************************/
function vIsSelect(control)
{
var i;

if(control.tagName == "SELECT")
{
for(i = 0; i < control.options.length; i ++)
if(control.options[i].selected == true && control.options[i].value != "") return true;
}
else// if(control.tagName == "INPUT" && (control.type == "checkbox" || control.type == "radio"))
{
if(typeof(control.length) == "undefined")
return control.checked;
else
for(i = 0; i < control.length; i++)
if(control[i].checked == true) return true;
}
return false;
}



/********************************************************************************************
*函数名:vCompare
*功能描述:对两个数据进行比较
*参数:
* inValidate 要验证的数据
* Operator 比较的类型
* inCompare 进行对比的数据
*返回值:如果比较符合Operator则返回True，否则返回False。
*********************************************************************************************/
function vCompare(inValidate, Operator, inCompare)
{
var CompareResult;

switch(Operator)
{
case "=":
CompareResult = (inValidate == inCompare)?true:false; break;
case "<>":
CompareResult = (inValidate != inCompare)?true:false; break;
case ">":
CompareResult = (inValidate > inCompare)?true:false; break;
case ">=":
CompareResult = (inValidate >= inCompare)?true:false; break;
case "<":
CompareResult = (inValidate < inCompare)?true:false; break;
case "<=":
CompareResult = (inValidate <= inCompare)?true:false; break;
case "VT":
CompareResult = (typeof(inValidate) == typeof(inCompare))?true:false; break;
}

return CompareResult;
}