﻿//頭尾去空白
function Trim(stringToTrim)
{
    return stringToTrim.replace(/^\s+|\s+$/g,"");
}

//功能說明:檢證函數
//參數說明:str=字串，reg=正則表達式
function IsCheck(str,reg)
{
	str = Trim(str);
	if(!reg.test(str))
	{
		return false ;
	}			
	return true;		
}

//功能說明：是否是數字(0,1,2,3,4,5,6,7,8,9)組成的字符
//參數說明：字符串
//返 回 值：bool,返回：是數字(0,1,2,3,4,5,6,7,8,9)組成的字符true,否則返回：false
function IsInt(obj)
{
	var reg = /^\d+$/;
	return IsCheck(obj,reg)
}  

//功能說明：是否符合EMail格式
//參數說明：字符串
//返 回 值：bool,返回：符合EMail格式true,否則返回：false
function IsEMail(str)
{
	var reg = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
	return IsCheck(str,reg)
}

///功能說明：檢證字符中是不符合日期格式
///參數說明：參數是西元日期字符串
///返 回 值： bool類型，是日期格式 true ,否則返回false
//function IsDate(str) {
//    var reg = /^(19|20)\d\d\/([1-9]|0[1-9]|1[012])\/([1-9]|0[1-9]|[12][0-9]|3[01])$/;
//    return IsCheck(str, reg)
//}

//驗證IP正確性
function IsIP(str){
    var reg = /^((\d)|(([1-9])\d)|(1\d\d)|(2(([0-4]\d)|5([0-5]))))\.((\d)|(([1-9])\d)|(1\d\d)|(2(([0-4]\d)|5([0-5]))))\.((\d)|(([1-9])\d)|(1\d\d)|(2(([0-4]\d)|5([0-5]))))\.((\d)|(([1-9])\d)|(1\d\d)|(2(([0-4]\d)|5([0-5])))|\*)$/;
    return IsCheck(str,reg);
}

///驗證台灣身分證函數
function IsTWID(str)
{
	str = Trim(str);
	str = str.toUpperCase();
	//為空返回
	if(str == "")
	{
		return false ;	
	}
	//長度是否為10
	if (str.length != 10)
	{
		return false ;	
	}
	//第一位是否為字母
	var part1 = str.substring(0,1);
    var reg = /^[a-zA-Z]+$/;
    if(!reg.test(part1))
    {	   
		return false ;	
	}
	
	//第二位是否為1或2
	var pos2 = str.charAt(1);
	if( pos2 !="1" &&  pos2 !="2") 
	{
		return false ;	
	}
	//後8位是否是數字
	var pos3 = str.substring(2,10) ;
	reg = /^\d+$/;
	if(!reg.test(pos3))
	{ 
		return false ;	
	}
	//其他規則驗證
	var alph = new Array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","X","Y","W","Z","I","O");
	var num  = new Array("10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35");
	var n=0;
	var i;
	for(i=0;i<alph.length;i++)
	{
		if(str.charAt(0)==alph[i])
		n=i;
	}
	var tot1 = parseFloat(num[n].charAt(0)) + (parseFloat(num[n].charAt(1)) * 9);
	var tot2 = 0;
	for(i=1;i<str.length-1;i++)
			tot2 = tot2 + parseFloat(str.charAt(i))*(9-i);
	var tot3 = parseFloat(str.charAt(9));
	var tot4 = tot1 + tot2 + tot3;
	if((tot4 % 10)!=0) 
	{
		return false ;	
	}
	return true;
}

//功能說明：檢查日期有效性
//參數說明：strDate=日期字串,strSign=分割符號
//返 回 值：bool,日期為有效=true,無效=false
function IsDate(strDate,strSign){
    
    var strDateArray;
    var intYear;
    var intMonth;
    var intDay;
    var boolLeapYear;
    
    if(strSign == null){
        if(strDate.length != 8) return false;
        
        intYear = strDate.substr(0,4);
        intMonth = strDate.substr(4,2);
        intDay = strDate.substr(6,2);
    }else{
        strDateArray = strDate.split(strSign);
        
        if(strDateArray.length!=3) return false;
        
        intYear = parseInt(strDateArray[0],10);
        intMonth = parseInt(strDateArray[1],10);
        intDay = parseInt(strDateArray[2],10);
    }

    if(isNaN(intYear)||isNaN(intMonth)||isNaN(intDay)) return false;
    
    if(intMonth>12||intMonth<1) return false;
    
    if((intMonth==1||intMonth==3||intMonth==5||intMonth==7||intMonth==8||intMonth==10||intMonth==12)&&(intDay>31||intDay<1)) return false;
    
    if((intMonth==4||intMonth==6||intMonth==9||intMonth==11)&&(intDay>30||intDay<1)) return false;
    
    if(intMonth==2){
        if(intDay<1) return false;
        
        boolLeapYear = false;
        if((intYear%100)==0){
            if((intYear%400)==0) boolLeapYear = true;
        }
        else{
            if((intYear%4)==0) boolLeapYear = true;
        }
        
        if(boolLeapYear){
            if(intDay>29) return false;
        }
        else{
            if(intDay>28) return false;
        }
    }
    return true;
}

//功能說明：是否符合半型英文及數字格式
//參數說明：字符串
//返 回 值：bool,返回：符合格式true,否則返回：false
function IsPassword(str) {
    var reg = /^[A-Za-z0-9]+$/;
    return IsCheck(str, reg)
}
