Как добавить ноль перед любым числом ниже 10 в Javascript, используя Regexp - PullRequest
19 голосов
/ 17 ноября 2011

Добрый день,

Есть ли регулярное выражение, которое я мог бы использовать, чтобы добавить 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

Большое спасибо!

Ответы [ 9 ]

70 голосов
/ 17 ноября 2011

Просто добавляйте ведущий 0 каждый раз, затем используйте slice(-2), чтобы получить последние два символа, например:

('0' + currentDate.getHours()).slice(-2)
5 голосов
/ 10 мая 2012

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

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"
3 голосов
/ 17 ноября 2011

Вам не нужно регулярное выражение для этого.Вы можете сделать простую функцию пэда самостоятельно:

function pad(n) {
    if (n < 10)
        return "0" + n;
    return n;
}

alert(pad(8));
alert(pad(11));

http://jsfiddle.net/DwnNG/

1 голос
/ 20 марта 2014

Я сейчас это старый, но я только что видел это простое и чистое решение, используемое на w3c , и мне просто нужно было поделиться им где-то.

var hours = currentDate.getHours();
(hours < 10 ? '0' : '') + hours;
1 голос
/ 17 ноября 2011

Как насчет:

x.replace(/^(\d)$/, "0$1");
0 голосов
/ 22 октября 2013

% 0 {длина} =>% 05 => 1 = 00001, 2 = 00002, ... 55 = 00055, ...

0 голосов
/ 17 ноября 2011

Готовы ли вы к своему единственному решению для регулярных выражений?

Передайте всю строку ... и это будет соответствовать однозначным числам и дополнит их 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 поддерживал утверждения-слепые.

0 голосов
/ 17 ноября 2011

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

   "2011-10-10 10:2:27".replace(/:(?=[^0](?::|$))/g, ":0");
0 голосов
/ 17 ноября 2011

Это должно сделать работу (в нем есть троичный оператор, но также есть регулярное выражение ^^)

stringDate.replace(/\d+/g, function(m) {
    return parseInt(m, 10) < 10 ? "0" + m : m;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...