2013-07-17 2 views
0

Я использую плагин сортировщика таблицы для сортировки моих таблиц. Я хочу, чтобы иметь возможность поймать даты столбца в формате:проверить и отсортировать дату в jquery

дд/мм/гггг чч: мм

, а затем отсортировать их правильно (для этого я должен переключаться дней с годами).

Вот что я до сих пор:

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

Анализатор не реально проверить дату. is функция определяет только если формат соответствует шаблону для функции format именно поэтому это просто легче сделать это вернуть ложь и вручную установить анализатор для столбца с помощью headers опции:

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

is функция выше требуется 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 и т. Д.).


Обновление: если вы хотите, чтобы этот анализатор будет автоопределение, то используйте следующую is регулярное выражение (updated 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

Я вызываю сортировщик таблиц init один раз для всех моих страниц, и в них много таблиц, поэтому я предпочел бы реализовать логику в функции is, чтобы разрешить пустые строки или дату в правильном формате. Не могли бы вы помочь мне с регулярным выражением для этой функции? спасибо большое :) –

+0

Я обновил свой ответ. Надеюсь, это поможет! – Mottie

Смежные вопросы