padstart - Cómo anteponer un cero delante de cualquier número por debajo de 10 en Javascript usando Regexp
quitar ceros a la izquierda javascript (9)
Buen día,
¿Hay un Regex que podría usar para anteponer un 0 antes de cualquier número que esté por debajo de 10?
No estoy buscando una biblioteca de análisis de fecha, ternario o soluciones if / else. (Ojalá)
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
Me gustaría un RegExp que podría aplicar a stringDate para obtener 2011-10-17 10:03:07
¡Muchas gracias!
¿Estás listo para tu solución regex de "hazlo todo" de una sola línea?
Pase la secuencia completa ... y esto coincidirá con un dígito y los rellenará con un 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"
Esto sería mucho más fácil si JavaScript admite look-behind-assertions.
Eso debería hacer el trabajo (tiene un operador ternario, pero también una expresión regular ^^)
stringDate.replace(//d+/g, function(m) {
return parseInt(m, 10) < 10 ? "0" + m : m;
});
No necesitas expresiones regulares para eso. Puede hacer una función de teclado simple usted mismo:
function pad(n) {
if (n < 10)
return "0" + n;
return n;
}
alert(pad(8));
alert(pad(11));
Prefiero el camino de Alex, pero si realmente quieres el modo de expresión regular, puedes intentar:
"2011-10-10 10:2:27".replace(/:(?=[^0](?::|$))/g, ":0");
Qué tal si:
x.replace(/^(/d)$/, "0$1");
Simplemente agregue el 0 inicial cada vez, luego use slice(-2)
para obtener los dos últimos caracteres, de esta manera:
(''0'' + currentDate.getHours()).slice(-2)
% 0 {longitud} =>% 05 => 1 = 00001, 2 = 00002, ... 55 = 00055, ...
Ahora, esto es viejo, pero acabo de ver esta solución simple y limpia utilizada en el w3c y simplemente tuve que compartirla en alguna parte.
var hours = currentDate.getHours();
(hours < 10 ? ''0'' : '''') + hours;
La siguiente función le permitirá declarar una longitud mínima para un número a lo largo o dentro de una cadena y la rellenará con ceros para que tenga la longitud adecuada.
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;
}
};
Para aquellos que quieren una versión menos críptica
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 || '' '');
}
};
Ejemplos:
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"