Ответ 1
Просто добавьте ведущий 0 каждый раз, затем используйте slice(-2)
, чтобы получить последние два символа, например:
('0' + currentDate.getHours()).slice(-2)
Добрый день,
Есть ли Regex, который я мог бы использовать для добавления 0 до любого числа, которое меньше 10?
Я не ищу библиотеку синтаксического анализа даты, тройные или if/else решения. (Будем надеяться)
var currentDate = new Date(),
stringDate = currentDate.getFullYear() + "-" + currentDate.getMonth() + "-" + currentDate.getDate() + " " + currentDate.getHours() + ":" + currentDate.getMinutes() + ":" + currentDate.getSeconds();
alert( stringDate ); //2011-10-17 10:3:7
Мне нужен RegExp, который я могу применить к stringDate, чтобы получить 2011-10-17 10:03:07
Большое спасибо!
Просто добавьте ведущий 0 каждый раз, затем используйте slice(-2)
, чтобы получить последние два символа, например:
('0' + currentDate.getHours()).slice(-2)
Следующая функция позволит вам объявить минимальную длину для числа вдоль или внутри строки и поместить его нулями, чтобы сделать ее соответствующей длиной.
var PrependZeros = function (str, len, seperator) {
if(typeof str === 'number' || Number(str)){
str = str.toString();
return (len - str.length > 0) ? new Array(len + 1 - str.length).join('0') + str: str;
}
else{
for(var i = 0,spl = str.split(seperator || ' '); i < spl.length; spl[i] = (Number(spl[i])&& spl[i].length < len)?PrependZeros(spl[i],len):spl[i],str = (i == spl.length -1)?spl.join(seperator || ' '):str,i++);
return str;
}
};
Для тех, кто хочет получить менее загадочную версию
var PrependZeros = function (str, len, seperator) {
if (typeof str === 'number' || Number(str)) {
str = str.toString();
return (len - str.length > 0) ? new Array(len + 1 - str.length).join('0') + str : str;
}
else {
var spl = str.split(seperator || ' ')
for (var i = 0 ; i < spl.length; i++) {
if (Number(spl[i]) && spl[i].length < len) {
spl[i] = PrependZeros(spl[i], len)
}
}
return spl.join(seperator || ' ');
}
};
Примеры:
PrependZeros("1:2:3",2,":"); // "01:02:03"
PrependZeros(1,2); // "01"
PrependZeros(123,2); // "123"
PrependZeros("1 2 3",3); // "001 002 003"
PrependZeros("5-10-2012",2,"-"); //"05-10-2012"
Для этого вам не нужно регулярное выражение. Вы можете сделать простую функцию пэда самостоятельно:
function pad(n) {
if (n < 10)
return "0" + n;
return n;
}
alert(pad(8));
alert(pad(11));
Как насчет:
x.replace(/^(\d)$/, "0$1");
Теперь я устарел, но я просто увидел это простое и чистое решение, используемое в w3c, и мне просто нужно было поделиться им где-нибудь.
var hours = currentDate.getHours();
(hours < 10 ? '0' : '') + hours;
Это должно делать работу (в ней есть тернарный оператор, но также регулярное выражение ^^)
stringDate.replace(/\d+/g, function(m) {
return parseInt(m, 10) < 10 ? "0" + m : m;
});
Я предпочитаю метод Alex, но если вы действительно хотите регулярное выражение, вы можете попробовать:
"2011-10-10 10:2:27".replace(/:(?=[^0](?::|$))/g, ":0");
Готовы ли вы к вашему решению с одним лайнером do-it-all?
Передайте всю строку... и это будет совпадать с одной цифрой и проложите их с помощью 0.
"2011-10-17 10:3:7"
.replace(/(^|[^0-9])([0-9])(?=($|[^0-9]))/ig, function ($0, $1) {
return $0[0] + '0' + $0[1];
});
//returns "2011-10-17 10:03:07"
Это было бы намного проще, если бы JavaScript поддерживал lookbehind-assertions.
% 0 {длина} = > % 05 = > 1 = 00001, 2 = 00002,... 55 = 00055,...