2013-07-17 30 views
0

我正在使用表分類器插件對我的表進行排序。 我希望能夠趕上日期列格式:在jquery中驗證並排序日期

DD/MM/YYYY HH:MM

,然後正確地對它們進行排序(爲了這個,我已經改用天歲)。

這裏是我到目前爲止:

ts.addParser({ 
     id: "hebreLongDate", 
     is: function (s) { 
      return /\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4} d{1,2}:d{1,2}/.test(s); 
     }, format: function (s, table) { 
      var c = table.config; 
      s = s.replace(/\-/g, "/"); 
      // reformat the string in ISO format 
      s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$2/$1"); 
      return $.tablesorter.formatFloat(new Date(s).getTime()); 
     }, type: "numeric" 
    }); 

它不工作。

我將不勝感激任何幫助,尤其是如果它帶有正確的正則表達式的含義的解釋。

感謝, 奧馬爾

回答

1

解析器並沒有真正驗證日期。

headers: { 
    1: { sorter: "hebreLongDate" } 
}, 

is功能:is功能只有在格式爲format功能這就是爲什麼它是隻是更容易使其返回false,並使用手動headers選項設置的解析器某列的模式相匹配檢測上面的模式需要HH:mm,所以如果列中的第一個表格單元格不匹配,它將忽略該分析器。因此,無論哪種方式,手動設置解析器都會更好。

無論如何,這裏是我會怎麼寫你所描述的解析器(demo):

$.tablesorter.addParser({ 
    id: "hebreLongDate", 
    is: function(s) { 
     return false; 
    }, 
    format: function(s, table, cell, cellIndex) { 
     s = s 
      // replace separators 
      .replace(/\s+/g," ").replace(/[\-.,]/g, "/") 
      // reformat dd/mm/yyyy to yyyy/mm/dd 
      .replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/, "$3/$2/$1"); 

     return s ? $.tablesorter.formatFloat((new Date(s).getTime() || ''), table) : s; 
    }, 
    type: "numeric" 
}); 

至於解釋的正則表達式,沒有太大上面的代碼和你之間的差異有你的問題。最大的區別是,上面的代碼確保日期和時間之間只有一個空格,日期可以用斜線,短劃線,句點,逗號或空格分隔(即1-1-2000,1 1 2000等)。


更新:如果你想有這樣的解析器可以自動進行檢測,然後用下面的正則表達式isupdated demo)。但重要的是要注意,這個正則表達式無法區分mmddyyyy和ddmmyyyy,所以它總是會檢測到ddmmyyyy。要覆蓋此選項,請將標題分類選項設置爲「shortDate」:

is: function(s) { 
    // testing for ##-##-####, so it's not perfect; time is optional 
    return (/(^\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4})/).test((s || '').replace(/\s+/g," ").replace(/[\-.,]/g, "/")); 
}, 
+0

很大的消除。謝謝 –

+0

我爲所有頁面調用table sorter init一次,並且在它們中有很多表 - 所以我寧願在is函數中實現邏輯以允許空字符串或日期格式正確。你能幫我用這個函數的正則表達式嗎?非常感謝:) –

+0

我已經更新了我的答案。我希望這有助於! – Mottie