Анализатор не реально проверить дату. 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, "/"));
},
большое объяснение. спасибо –
Я вызываю сортировщик таблиц init один раз для всех моих страниц, и в них много таблиц, поэтому я предпочел бы реализовать логику в функции is, чтобы разрешить пустые строки или дату в правильном формате. Не могли бы вы помочь мне с регулярным выражением для этой функции? спасибо большое :) –
Я обновил свой ответ. Надеюсь, это поможет! – Mottie