Javascript добавляет нули в начало строки (максимальная длина 4 символа)

var number = 1310;

следует оставить в покое.

var number = 120;

следует изменить на "0120";

var number = 10;

следует изменить на "0010";

var number = 7;

следует изменить на "0007";

Ответы

Ответ 1

function pad_with_zeroes(number, length) {

    var my_string = '' + number;
    while (my_string.length < length) {
        my_string = '0' + my_string;
    }

    return my_string;

}

Ответ 3

Здесь другой путь. Исходя из того, что я делал, это нужно делать тысячи раз при загрузке страницы. Это довольно эффективный процессор для жесткого кодирования последовательности нулей один раз, и нарезать столько, сколько вам нужно для пэда, сколько угодно раз. Мне действительно нравится сила 10-го метода - это довольно гибкая.

Во всяком случае, это так же эффективно, как я мог придумать:

Для исходного вопроса ВЫБЕРИТЕ ОДИН из случаев...

var number = 1310;
var number = 120;
var number = 10;
var number = 7;

затем

// only needs to happen once 
var zeroString = "00000";

// one assignment gets the padded number
var paddedNum = zeroString.substring((number + "").length, 4) + bareNum;

//output
alert("The padded number string is: " + paddedNum);

Конечно, вам все равно нужно проверить ввод. Поскольку это ТОЛЬКО работает надежно при следующих условиях:

  • Требуется количество нулей в нулевой строке - длина + 1
  • Количество цифр в стартовом номере меньше или равно вашей желаемой длине

Предыстория:

У меня есть случай, который требует фиксированной длины (14 цифр) с нулевым количеством. Я хотел посмотреть, насколько я могу это сделать. Он работает десятки тысяч раз при загрузке страницы, поэтому эффективность имеет значение. Он не совсем повторно используется как есть, и он немного неэффективен. Кроме того, что это очень просто.

Для нужных n цифр с заполненной строкой этот метод требует строки (по крайней мере) n + 1 нулей. Индекс 0 - это первый символ в строке, который никогда не будет использоваться, так что действительно может быть что угодно.

Обратите внимание, что string.substring() отличается от string.substr()!

var bareNum = 42 + '';  
var zeroString = "000000000000000";
var paddedNum = zeroString.substring(bareNumber.length, 14) + bareNum

Это выталкивает нули с нуляString, начиная с позиции, соответствующей длине строки, и продолжает получать нули до необходимой длины 14. Пока эта "14" в третьей строке является нижним целым числом, чем число символов в zeroString, он будет работать.

Ответ 4

//to: 0 - to left, 1 - to right
String.prototype.pad = function(_char, len, to) {
    if (!this || !_char || this.length >= len) {
        return this;
    }
    to = to || 0;

    var ret = this;

    var max = (len - this.length)/_char.length + 1;
    while (--max) {
        ret = (to) ? ret + _char : _char + ret;
    }

    return ret;
};

Использование:

someString.pad(neededChars, neededLength)

Пример:

'332'.pad('0', 6); //'000332'
'332'.pad('0', 6, 1); //'332000'

Ответ 5

function pad(n, len) {
  return (new Array(len + 1).join('0') + n).slice(-len);
}

может не работать в старых версиях IE.

Ответ 6

попробуйте это:

('0000' + number).slice(-4);

или

(number+'').padStart(4,'0');

Ответ 7

Подход, который мне нравится, - это добавить 10 ^ N к числу, где N - количество нулей, которые вы хотите. Обработать результирующее число как строку и отрезать нулевую цифру. Конечно, вам нужно быть осторожным, если ваш номер ввода может быть больше длины вашего пэда, но он все еще намного быстрее, чем метод цикла:

// You want to pad four places:
>>> var N = Math.pow(10, 4)
>>> var number = 1310
>>> number < N ? ("" + (N + number)).slice(1) : "" + number
"1310"
>>> var number = 120
>>> number < N ? ("" + (N + number)).slice(1) : "" + number
"0120"
>>> var number = 10
>>> number < N ? ("" + (N + number)).slice(1) : "" + number
"0010"
…

и т.д.. Вы можете сделать это достаточно легко:

/**
 * Pad a number with leading zeros to "pad" places:
 *
 * @param number: The number to pad
 * @param pad: The maximum number of leading zeros
 */
function padNumber(number, pad) {
    var N = Math.pow(10, pad);
    return number < N ? ("" + (N + number)).slice(1) : "" + number
}

Ответ 8

Нет цикла, нет функций

let n = "" + 100;
let x = ("0000000000" + n).substring(n.length);//add your amount of zeros
alert(x + "-" + x.length);

Ответ 9

Нейт как лучший способ, который я нашел, слишком долго читать. Поэтому я предлагаю вам 3 простых решения.

1. Так вот мое упрощение ответа Нейта.

//number = 42
"0000".substring(number.toString().length, 4) + number;

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

function pad_with_zeroes(number, len) {
  var zeroes = "0".repeat(len);
  return zeroes.substring(number.toString().length, len) + number;
}

// Usage: pad_with_zeroes(42,4);
// Returns "0042"

3. Здесь третье решение, расширяющее прототип Number.

Number.prototype.toStringMinLen = function(len) {
  var zeroes = "0".repeat(len);
  return zeroes.substring(self.toString().length, len) + self;
}

//Usage: tmp=42; tmp.toStringMinLen(4)

Ответ 10

Я написал общую функцию для этого. Он принимает управление вводом и длину пэда в качестве ввода.

function padLeft(input, padLength) {

    var num = $("#" + input).val();
    $("#" + input).val(('0'.repeat(padLength) + num).slice(-padLength));

}

Ответ 11

Используйте функцию String.JS librairy padLeft:

S('123').padLeft(5, '0').s   --> 00123