JS常用的正則,和時間表達式

/*
------------------------------------------------------------------------------------------------------------
  以下一組函數補充Javascript庫函數
------------------------------------------------------------------------------------------------------------
*/
// 取得字符串的實際字節長度
String.prototype.trueLength = function() {
  return this.replace(/[^\x00-\xff]/g, "**").length;
}

// 截去行首的空格等字符
String.prototype.ltrim = function() {
  return this.replace(/(^\s*)/g, "");
}

// 截去行尾的空格等字符
String.prototype.rtrim = function() {
  return this.replace(/(\s*$)/g, "");
}

// 截去行首與行尾的空格等字符
String.prototype.trim = function() {
  return this.replace(/(^\s*)|(\s*$)/g, "");
}

function formtrim(frm){
  for (var i=0; i<frm.elements.length; i++){
    var e = frm.elements[i];
    if(e.type == "text")
      e.value = e.value.trim();
    else if(e.type == "textarea")
      e.value = e.value.rtrim();
  }
}

// 判斷字符串是否以另一字符串開始
String.prototype.startsWith = function(s) {
  if(s==null||s==""||this.length==0||s.length>this.length)
    return false;
  var i = this.indexOf(s);
  return i == 0;
}

// 判斷字符串是否以另一字符串結束
String.prototype.endsWith = function(s) {
  if(s==null||s==""||this.length==0||s.length>this.length)
    return false;
  if(this.substring(this.length-s.length)==s)
    return true;
  else
    return false;
  return true;
}

Number.prototype.toFixedHead = function(fractionDigits) {
  var s = this.toString();
  while (s.length < fractionDigits)
    s = "0" + s;
    
  return s;
}

/*
------------------------------------------------------------------------------------------------------------
  以下一組函數用於Cookie操作
------------------------------------------------------------------------------------------------------------
*/

function setCookie(name,value) {
   var today = new Date();
   var expires = new Date();
   expires.setTime(today.getTime() + 1000*60*60*24*365);
   document.cookie = name + "=" + escape(value) + "; expires=" + expires.toGMTString();
}

function getCookie(Name) {
   var search = Name + "=";
   if(document.cookie.length > 0) {
      offset = document.cookie.indexOf(search);
      if(offset != -1) {
         offset += search.length;
         end = document.cookie.indexOf(";", offset);
         if(end == -1) end = document.cookie.length;
         return unescape(document.cookie.substring(offset, end));
      }
      else return('');
   }
   else return('');
}

/*
------------------------------------------------------------------------------------------------------------
  以下一組函數用於界面操作
------------------------------------------------------------------------------------------------------------
*/
function showobj(obj)
{
  obj.style.visibility="visible";
  obj.style.position="relative";
}

function hideobj(obj)
{
  obj.style.visibility="hidden";
  obj.style.position="absolute";
}

function checkAll(name, checked) {
  var i;
  var arr = document.getElementsByName(name);
  for (i = 0; i < arr.length; i++) {
    arr[i].checked = checked;
  }
}

function selectAll() {
  checkAll("select", true);
}

// 此函數用於選定有指定值的單選按鈕
function selectButton(name, value) {
  var arr = document.getElementsByName(name);
  for (i = 0; i < arr.length; i++) {
    arr[i].checked = arr[i].value == value;
  }
}

// 此函數用於選定有多個值的核選按鈕
function selectButtons(name, commaValues) {
  var listArray = commaValues.split(",");
  var arr = document.getElementsByName(name);
  for (var i = 0; i < arr.length; i++)
    arr[i].checked = false;
  for (var i = 0; i < arr.length; i++)
    for (var j = 0; j < listArray.length; j++){
      if (arr[i].value == listArray[j])
        arr[i].checked = true;
    }
}

// 此函數用於統計已選定的核選按鈕
function statSelectedButton(name) {
  var c = 0;
  var arr = document.getElementsByName(name);
  if (arr != null)
    for (i = 0; i < arr.length; i++) {
      if (arr[i].checked)
        c++;
    }
  return c;
}

// 此函數用於以數組的形式返回已選定的核選按鈕的多個值
// 沒有選中的按鈕則返回空數組
function getButtonValues(name) {
  var res_arr = [];
  var arr = document.getElementsByName(name);
  if (arr != null)
    for (var i = 0; i < arr.length; i++) {
      if (arr[i].checked)
        res_arr[res_arr.length] = arr[i].value;
    }
  return res_arr;
}

// 此函數用於多值選擇表單中選中給定的多個值
function setSelectValues(selobj, commaValues) {
  var listArray = commaValues.split(",");
  for (var i = 0; i < selobj.options.length; i++)
    for (var j = 0; j < listArray.length; j++)
      if (selobj.options[i].value == listArray[j])
        selobj.options[i].selected = true;
}

/*
------------------------------------------------------------------------------------------------------------
  以下一組函數用於日期計算
------------------------------------------------------------------------------------------------------------
*/

// 函數名:DateToStr
// 功能介紹:日期格式的日期轉換成字符串(年-月-日格式)
// 參數說明:dDate - 日期格式的日期
function DateToStr(dDate) {
  return dDate.getFullYear() + "-" + (dDate.getMonth() + 1) + "-" + dDate.getDate();
}

function DateToFullStr(dDate) {
  return dDate.getFullYear().toFixedHead(4) + "-" + (dDate.getMonth() + 1).toFixedHead(2) + "-" + dDate.getDate().toFixedHead(2);
}

function DateTimeToStr(dDate) {
  return dDate.getFullYear() + "-" + (dDate.getMonth() + 1) + "-" + dDate.getDate() + " " + 
    dDate.getHours() + ":" + dDate.getMinutes() + ":" + dDate.getSeconds();
}

// 函數名:StrToDate
// 功能介紹:字符串(年-月-日)格式的日期轉換成日期格式
// 參數說明:sDate - 字符串格式的日期
function StrToDate(sDate) {
  aDate = sDate.split("-");
  return new Date(aDate[1] + '/' + aDate[2] + '/' + aDate[0]); //轉換爲月-日-年格式  
}

// 函數名:StrToDateTime
// 功能介紹:字符串(年-月-日)格式的日期轉換成日期格式
// 參數說明:sDate - 字符串格式的日期
function StrToDateTime(sDateTime) {
  aDate = sDate.split(" ");
  bDate = aDate[0];
  cDate = bDate.split("-");
  return new Date(cDate[1] + '/' + cDate[2] + '/' + cDate[0] + ' ' + aDate[1]); //轉換爲月-日-年格式  
}

// 函數名:Today
// 功能介紹:取得今天的日期,格式爲字符串(年-月-日)
function Today() {
  return DateToStr(new Date());
}  

// 函數名:FirstDayOfMonth
// 功能介紹:取得日期所屬月份第一天的日期,結果爲日期型
function FirstDayOfMonth(dDate) {
  var y = dDate.getFullYear();
  var m = dDate.getMonth() + 1;
  return new Date(m + "/01/" + y);
}  
// 函數名:FirstDayOfLastMonth
// 功能介紹:取得日期上一個月份第一天的日期,結果爲日期型
function FirstDayOfLastMonth(dDate) {
  var y = dDate.getFullYear();
  var m = dDate.getMonth();
  return new Date(m + "/01/" + y);
}  

// 函數名:DateDiff
// 功能介紹:計算天數差的函數
// 參數說明:sDate1 - 字符串格式的日期1,年-月-日格式
//           sDate2 - 字符串格式的日期2,年-月-日格式
function DateDiff(sDate1, sDate2){
  
  var oDate1, oDate2, iDays;
  oDate1 = StrToDate(sDate1);
  oDate2 = StrToDate(sDate2);
  
  iDays = parseInt((oDate1 - oDate2) / (1000 * 60 * 60 * 24)); //把相差的毫秒數轉換爲天數  
  
  return iDays;
  

//函數名:ChkDate  
//功能介紹:檢查是否爲日期  
//參數說明:sDate - 要檢查的字符串,年-月-日格式  
function ChkDate(sDate) {
  
  var oDate = StrToDate(sDate)
  
  return (oDate != "NaN");
  
}

// 函數名:DateAdd
// 功能介紹:日期加若干天(可以爲負)
// 參數說明:sDate - 字符串格式的日期,年-月-日格式
//           iDays - 整數形式的日期數
function DateAdd(sDate, iDays) {
  
  var oDate = StrToDate(sDate)
  var ms = oDate.valueOf();
  oDate = new Date(ms + iDays * 1000 * 60 * 60 * 24);
  
  return DateToStr(oDate); 
  
}

// 函數名:ChkHour
// 功能介紹:檢查含小時的日期格式是否正確
// 參數說明:sHour - 要檢查的字符串,年-月-日 時格式  
function ChkHour(sHour) {
  var a = sHour.split(" ");
  return a.length = 2 && ChkDate(a[0]) && a[1] >= 0 && a[1] <= 23;
}

// 函數名:ChkDateTime
// 功能介紹:檢查可能含時、分、秒的日期格式是否正確
// 參數說明:sDateTime - 要檢查的字符串,年-月-日 時:分:秒格式  
function ChkDateTime(sDateTime) {
  var a = sDateTime.split(" ");
  if (a.length > 2)
    return false;
    
  var r = ChkDate(a[0]);
  if (!r)
    return false;
    
  if (a.length = 2) {
    var b = a[1].split(":");
    if (b.length > 3)
      return false;
      
    if (b.length >= 1) {
      for (var c = 0; c < b.length; c++)
        if (isNaN(Number(b[c])))
      return false;

      var d = parseInt(b[0]);
      if (d < 0 || d > 23)
        return false;
    }
      
    if (b.length >= 2) {
      var d = parseInt(b[1]);
      if (d < 0 || d > 59)
        return false;
    }

    if (b.length >= 3) {
      var d = parseInt(b[2]);
      if (d < 0 || d > 59)
        return false;
    }
  }
  return true;
}

function HourToStr(dHour) {
  var y = dHour.getFullYear();
  var m = dHour.getMonth() + 1;
  var d = dHour.getDate();
  var h = dHour.getHours();
  
  return y.toFixedHead(4) + "-" + m.toFixedHead(2) + "-" + d.toFixedHead(2) + " " + h.toFixedHead(2);
}

function CheckAge(field, fieldname, errmsg, curdates, min_age, max_age) {
  var birdate = StrToDate(field.value);
  var curdate = StrToDate(curdates);

  if(birdate == "NaN" ){
    if (errmsg == "") field.focus();
    errmsg += fieldname + ":不是有效的日期格式;\n";
  }
  else{
    var age;
    field.value = DateToFullStr(birdate);
    if( curdate.getMonth() > birdate.getMonth() || curdate.getMonth() == birdate.getMonth() && curdate.getDate() >= birdate.getDate() ){
      age = curdate.getFullYear() - birdate.getFullYear();
    }
    else{
      age = curdate.getFullYear() - birdate.getFullYear() - 1;
    }
    if(age < min_age || age > max_age ){
      if (errmsg == "") field.focus();
      errmsg += fieldname + ":年齡必須在 " + min_age + " - " + max_age + " 之間;\n";
    }
  }
  return errmsg;
}
/*
------------------------------------------------------------------------------------------------------------
  以下一組函數用於網頁上檢查輸入內容
------------------------------------------------------------------------------------------------------------
*/
// 檢查單選按鈕是否選取
function CheckRadio(obj, objname, errmsg) {
  for (i = 0; i < obj.length; i++) {
    if(obj[i].checked) return errmsg;
  }
  if (errmsg == "") obj[0].focus();
  errmsg += objname + ":請選擇其中一項;\n";
  return errmsg;
}

//檢查複選框選取個數
function CheckRadios(field, title, msg, min, max){
    var sel = 0;
    for (var i=0; i<field.length; i++) {
        if(field[i].checked) sel++;
    }
    if (sel < min) {
        if (msg == "") field[0].focus();
        msg += title + ":選擇了" + sel + "項,至少選擇" + min + "項;\n";
    }
    else
    if (sel > max) {
        if (msg == "") field[0].focus();
        msg += title + ":選擇了" + sel + "項,最多選擇" + max + "項;\n";
    }
    return msg;
}

// 檢查是否爲空
function CheckNull(obj, objname, errmsg) {
    if (obj.value.trim() == ""){
        if (errmsg == "")
        try{
            obj.focus();
        }
        catch(e){
        }
        errmsg += objname + ":未輸入;\n";
    }
    return errmsg;
}

// 檢查是否相等
function CheckEqual(obj, obj2, obj2name, errmsg) {
  if (obj.value != obj2.value) {
    if (errmsg == "") 
      obj2.focus();
    errmsg += obj2name + ":不相等;\n";
  }
  return errmsg;
}

// 檢查日期是否合法
function CheckDay(obj, objname, errmsg) {
  var objv = obj.value.trim();
  if (objv != "") {
    if (!ChkDate(obj.value)) {
      if (errmsg == "") 
    obj.focus();
      errmsg += objname + ":請按“年-月-日”的格式輸入;\n";
    }
    else {
      obj.value = DateToFullStr(StrToDate(obj.value)); // 把不規整的日期規整,例如2005-9-31變成2005-10-1
    }
  }
  return errmsg;
}

// 檢查日期是否合法
function CheckDayTime(obj, objname, errmsg) {
  var objv = obj.value.trim();
  if (objv != "") {
    if (!ChkDateTime(obj.value)) {
      if (errmsg == "") 
    obj.focus();
      errmsg += objname + ":請按“年-月-日 時:分:秒”的格式輸入;\n";
    }
    else {
      obj.value = DateTimeToStr(StrToDateTime(obj.value)); // 把不規整的日期規整,例如2005-9-31變成2005-10-1
    }
  }
  return errmsg;
}

// 檢查整數或浮點類型是否有效,且是否在指定範圍內
function CheckNumRange(obj, objname, errmsg, min_value, max_value) {
  var objv = obj.value.trim();
  if (objv != "") {
    var n = Number(objv);
    var s = String(n);
    if (s == "NaN") {
      if (errmsg == "") 
    obj.focus();
      errmsg += objname + ":不是有效的數字格式;\n";
    }
    else 
    if (n < min_value) {
      if (errmsg == "") 
    obj.focus();
      errmsg += objname + ":最小值爲" + min_value + ";\n";
    }
    else
    if (n > max_value) {
      if (errmsg == "") 
    obj.focus();
      errmsg += objname + ":最大值爲" + max_value + ";\n";
    }
  }
  return errmsg;
}


// 檢查地區到小類
function CheckDetailRegion(obj, objname, errmsg) {
  var objv = obj.value.trim();
  if (objv != "") {
    if (objv == "010000" || (objv > "51" && objv < "61" && objv.endsWith("0000"))){
      if (errmsg == "") 
    obj.focus();
      errmsg += objname + ":請輸入到具體的城市;\n";
    }
    else if (objv == "010100" || objv == "010500"){
      if (errmsg == "") 
    obj.focus();
      errmsg += objname + ":請輸入到具體的區縣;\n";
    }
  }
  return errmsg;
}


// 檢查字符串是否符合正則表達式
function CheckExpression(obj, objname, errmsg, expression, err) {
  var objv = obj.value.trim();
  if (objv != "") {
    var flag = expression.test(objv);
    if(!flag) {
      if (errmsg == "") 
    obj.focus();
      errmsg += objname + ":" + err + ";\n";
    }
  }
  return errmsg;
}

// 檢查字符串是否符合正則表達式(禁止!)
function CheckAntiExpression(obj, objname, errmsg, expression, err) {
  var objv = obj.value.trim();
  if (objv != "") {
    var flag = expression.test(objv);
    if(flag) {
      if (errmsg == "") 
    obj.focus();
      errmsg += objname + ":" + err + ";\n";
    }
  }
  return errmsg;
}

// 檢查身份證件號碼
function CheckId(obj, objname, errmsg) {
  var expression = /^[a-zA-Z0-9]{5,18}$/;
  return CheckExpression(obj, objname, errmsg, expression, "要求爲5-18個數字或字母");
}

// 檢查郵政編碼
function CheckZip(obj, objname, errmsg) {
  var expression = /^[0-9]{6}$/;
  return CheckExpression(obj, objname, errmsg, expression, "要求爲6個數字");
}

// 檢查電子郵件
function CheckEmail(obj, objname, errmsg) {
  var expression = /^\w+([-+.]+\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
  return CheckExpression(obj, objname, errmsg, expression, "格式不正確");
}

// 檢查網址,未成功
function CheckURL(obj, objname, errmsg) {
  var expression = /^(http:\/\/)*(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$/;
  // 所有協議爲 /^([a-zA-z]+:\/\/)*(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$/
  return CheckExpression(obj, objname, errmsg, expression, "格式不正確");
}

// 檢查字符串長度
function CheckSLen(obj, objname, errmsg, min_len, max_len) {
  var objv = obj.value;
  if (objv != "") {
    var l = objv.trueLength();
    if (l < min_len) {
      if (errmsg == "") 
    obj.focus();
      errmsg += objname + ":目前輸入了" + l + "個字符,最少應有" + min_len + "個字符;\n";
    }
    else
    if (l > max_len) {
      if (errmsg == "") 
    obj.focus();
      errmsg += objname + ":目前輸入了" + l + "個字符,最多不應超過" + max_len + "個字符;\n";
    }
  }
  return errmsg;
}

// 檢查Unicode字符串長度
function CheckUSLen(obj, objname, errmsg, min_len, max_len) {
  var objv = obj.value;
  if (objv != "") {
    var l = objv.length;
    if (l < min_len) {
      if (errmsg == "") 
    obj.focus();
      errmsg += objname + ":目前輸入了" + l + "個字符,最少應有" + min_len + "個字符;\n";
    }
    else
    if (l > max_len) {
      if (errmsg == "") 
    obj.focus();
      errmsg += objname + ":目前輸入了" + l + "個字符,最多不應超過" + max_len + "個字符;\n";
    }
  }
  return errmsg;
}

// 檢查電話號碼是否正確
function CheckTel(obj, objname, errmsg) {
  var expression =  /^[\d\-]{7,}$/;
  return CheckExpression(obj, objname, errmsg, expression, "格式不正確");
}

// 檢查是否存在電話號碼(禁止)
function CheckAntiTel(obj, objname, errmsg) {
  var expression = /([0-9\ \_\--0123456789]){8,}/;
  return CheckAntiExpression(obj, objname, errmsg, expression, "內容中含有電話號碼");
}

/*
------------------------------------------------------------------------------------------------------------
  以下一組函數用於界面上修整數據
------------------------------------------------------------------------------------------------------------
*/
// 將FORM中所有輸入框的首尾空格去掉
function trimfrm(frm){
  for (var i=0; i<frm.elements.length; i++){
    var e = frm.elements[i];
    if(e.type=="text")
      e.value = e.value.trim();
    else if(e.type=="textarea")
      // 大文本只修整右邊空格
      e.value = e.value.rtrim();
  }
}

/*
------------------------------------------------------------------------------------------------------------
  以下一組函數用於通用的數據處理
------------------------------------------------------------------------------------------------------------
*/
// 將源數組中的元素用字典數組中的數據對來替換(翻譯), 結果數組中不剔除重複元素
// 例: transValues([1,2,3], [[1, a], [2, b], [3, c]]) 返回[a, b, c]
function transValues(source_arr, dict_arr) {
  var res_arr = [];
  if (source_arr != null && dict_arr != null) {
    for (var i = 0; i < source_arr.length; i++)
      for (var j = 0; j < dict_arr.length; j++)
        if (source_arr[i] == dict_arr[j][0]) {
      res_arr[res_arr.length] = dict_arr[j][1];
      break;
    }
  }
  
  return res_arr;
}

//此函數用於初始表單Radio元素
function initRadio   (frm, name, value) {
  for (var i=0; i<frm.elements.length; i++){
    var e = frm.elements[i];
    if(e.type == "radio" && e.name == name && e.value == value) e.checked = true;
  }
}

//此函數用於初始表單CheckBox元素
function initCheckBox(frm, name, value) {
  var arr = value.split(",");
  for (var i=0; i<frm.elements.length; i++){
    var e = frm.elements[i];
    if(e.type == "checkbox" && e.name == name){
      e.checked = false;
      for(var j=0; j<arr.length; j++){
        if(e.value == arr[j]) e.checked = true;
        break;
      }
    }
  }
}

//檢查是否英文字符串
function isEnglish(str){
  var pat = /[\u4E00-\u9FA5]/;
  return str == null ? false : !pat.test(str);
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章