Додавання зайвих нулів перед числом за допомогою jQuery?


83

У мене є завантажений файл, який відформатований так

MR 1

MR 2

MR 100

MR 200

MR 300

І т. Д.

Що мені потрібно зробити, це додати додаткові два 00-х перед тим, як щось перед MR 10 і додати одне зайве 0 перед MR10-99

Отже файли форматуються

MR 001

MR 010

MR 076

І т. Д.

Будь-яка допомога була б чудовою!


3
jQuery тут вам не допоможе (принаймні, не щодо форматування) ... але як ви отримуєте доступ до файлу? Як ви отримуєте його вміст? Якось не зрозумілий контекст. Будь ласка, надайте хоча б якийсь код, щоб ми могли краще зрозуміти проблему.
Фелікс Клінг,

@FelixKling Файли не є актуальними. Він запитує про форматування.
felwithe

Відповіді:


215

Припустимо, що ці значення зберігаються у деяких рядках, спробуйте наступне:

function pad (str, max) {
  str = str.toString();
  return str.length < max ? pad("0" + str, max) : str;
}

pad("3", 3);    // => "003"
pad("123", 3);  // => "123"
pad("1234", 3); // => "1234"

var test = "MR 2";
var parts = test.split(" ");
parts[1] = pad(parts[1], 3);
parts.join(" "); // => "MR 002"

3
Я знаю, що це старе, але ця функція мені допомогла, і я думав додати до неї. Це виконає перетворення типу для цілочисельних або плаваючих змінних, тобто ви можете зробити це pad(85, 5)також добре pad("85", 5). return (str).toString().length < max ? pad("0" + (str).toString(), max) : (str).toString();
Ремі Бретон,

7
@ RémiBreton Ваша функція використовує забагато разів .toString(). Я думаю, це було б кращеfunction pad (str, max) { str=str.toString(); function main(str,max){ return str.length < max ? main("0" + str, max) : str; } return main(str,max); }
Оріоль

2
String.prototype.padLeft = функція padLeft (довжина, leadChar) {if (leadChar === не визначено) leadChar = "0"; повернути this.length <length? (leadChar + this) .padLeft (length, leadChar): this; };
Тім Валентин

35

У мене є потенційне рішення, яке, на мою думку, є актуальним, я розмістив про це тут:

https://www.facebook.com/antimatterstudios/posts/10150752380719364

в основному, ви хочете мінімальну довжину 2 або 3, ви можете налаштувати, скільки 0 ви вводите в цей фрагмент коду

var d = new Date();
var h = ("0"+d.getHours()).slice(-2);
var m = ("0"+d.getMinutes()).slice(-2);
var s = ("0"+d.getSeconds()).slice(-2);

Я знав, що завжди отримаю одне ціле число як мінімум (причина години 1, години 2) тощо, але якщо ви не можете бути впевнені, що отримаєте щось, крім порожнього рядка, ви можете просто зробити "000" + d.getHours ( ), щоб переконатися, що ви отримуєте мінімум.

тоді ви хочете 3 числа? просто використовуйте -3 замість -2 у своєму коді, я просто пишу це, тому що хотів побудувати цілодобовий годинник надзвичайно просто.


22

Примітка: див. Оновлення 2, якщо ви використовуєте останню версію ECMAScript ...


Ось рішення, яке мені сподобалося простотою від відповіді на подібне питання :

var n = 123

String('00000' + n).slice(-5); // returns 00123
('00000' + n).slice(-5);       // returns 00123

ОНОВЛЕННЯ

Як запропонував @RWC, ви можете, звичайно, красиво обернути це у загальну функцію, як це:

function leftPad(value, length) { 
    return ('0'.repeat(length) + value).slice(-length); 
}

leftPad(123, 5); // returns 00123

А для тих, хто не любить скибочку:

function leftPad(value, length) {
    value = String(value);
    length = length - value.length;
    return ('0'.repeat(length) + value)
}

Але якщо продуктивність має значення, рекомендую прочитати відповідь на відповідь, перш ніж вибрати одне із запропонованих рішень.

ОНОВЛЕННЯ 2

У ES6 клас String тепер поставляється з вбудованим padStartметодом, який додає провідні символи до рядка. Перевірте MDN тут для довідки String.prototype.padStart(). І є такожpadEnd метод закінчення символів.

Тож із ES6 це стало так просто, як:

var n = 123;
n.padStart(5, '0'); // returns 00123

3
Покращена версія: функція leftPad (значення, maxLength) {return String ('0'.repeat (maxLength) + value) .slice (-maxLength); }
RWC

7
function addLeadingZeros (n, length)
{
    var str = (n > 0 ? n : -n) + "";
    var zeros = "";
    for (var i = length - str.length; i > 0; i--)
        zeros += "0";
    zeros += str;
    return n >= 0 ? zeros : "-" + zeros;
}

//addLeadingZeros (1, 3) =   "001"
//addLeadingZeros (12, 3) =  "012"
//addLeadingZeros (123, 3) = "123"

Іншими словами: перетворіть його у рядок, а потім заповніть нулями .
pavium

4

Цю функцію я зазвичай використовую у своєму коді для додавання нулів до числа або рядка.

Вхідні дані - це рядок або число (str) та бажана довжина виводу (len).

var PrependZeros = function (str, len) {
    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(' '); 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(' '):str,i++);
    return str;
}

};

Приклади:

PrependZeros('MR 3',3);    // MR 003
PrependZeros('MR 23',3);   // MR 023
PrependZeros('MR 123',3);  // MR 123
PrependZeros('foo bar 23',3);  // foo bar 023

2

Якщо розділити пробіл, ви можете додати початкові нулі, використовуючи просту функцію, наприклад:

function addZeros(n) {
  return (n < 10)? '00' + n : (n < 100)? '0' + n : '' + n;
}

Таким чином, ви можете перевірити довжину рядка, і якщо вона менше 6, розділіть пробіл, додайте нулі до числа, а потім знову з’єднайте його.

Або як регулярний вираз:

function addZeros(s) {
  return s.replace(/ (\d$)/,' 00$1').replace(/ (\d\d)$/,' 0$1');
}

Я впевнений, що хтось може це зробити однією заміною, а не двома.

Редагувати - приклади

alert(addZeros('MR 3'));    // MR 003
alert(addZeros('MR 23'));   // MR 023
alert(addZeros('MR 123'));  // MR 123
alert(addZeros('foo bar 23'));  // foo bar 023

Він поставить один або два нулі перед числом у кінці рядка з пробілом перед ним. Байдуже, що трохи до місця.


Що станеться, якщо хтось скаже, якщо у документі є MR 003, чи можемо ми проігнорувати додавання 0s тощо
Chill Web Designs

2

Просто для сміху зробіть це довгий неприємний спосіб ....:
(ПРИМІТКА: я цим не користувався, і я б не радив цим користуватися.!)

function pad(str, new_length) {
    ('00000000000000000000000000000000000000000000000000' + str).
    substr((50 + str.toString().length) - new_length, new_length)
}

1

Мені щось подібне мені знадобилося днями, Пуд, замість завжди 0, я хотів мати можливість сказати йому те, що я хотів, підбивши передні. Ось що я придумав для коду:

function lpad(n, e, d) {
  var o = ''; if(typeof(d) === 'undefined'){ d='0'; } if(typeof(e) === 'undefined'){ e=2; }
  if(n.length < e){ for(var r=0; r < e - n.length; r++){ o += d; } o += n; } else { o=n; }
  return o; }

Де n - те, що ви хочете заповнити, e - потужність, якою ви хочете, щоб воно було заповнене (кількість символів, яке повинно бути довшим), а d - те, чим ви хочете, щоб воно було заповнене. Здається, це добре працює для того, для чого мені це було потрібно, але це не вдасться, якщо "d" має довжину більше одного символу.


1
var str = "43215"; 
console.log("Before : \n string :"+str+"\n Length :"+str.length);
var max = 9;
while(str.length < max ){
                                str = "0" + str;

                        }
console.log("After : \n string :"+str+"\n Length :"+str.length);

У мене це вийшло! Щоб збільшити нулі, оновіть змінну ' max '

URL-адреса робочої скрипки: Додавання зайвих нулів перед числом за допомогою jQuery? :


1

str може бути числом або рядком.

formatting("hi",3);
function formatting(str,len)
{
   return ("000000"+str).slice(-len);
}

Додайте більше нулів, якщо потрібні великі цифри


0

Простіше кажучи, ми можемо написати наступне:

for(var i=1;i<=31;i++)
    i=(i<10) ? '0'+i : i;

// Тому що більшість часу нам це потрібно для дня, місяця чи суми.


0

Знайте, що це стара публікація, але ось ще один короткий, ефективний спосіб: нулі

редагувати: dur. якщо num не є рядком, ви додасте:

len -= String(num).length;

інакше це все добре

function addLeadingZeros(sNum, len) {
    len -= sNum.length;
    while (len--) sNum = '0' + sNum;
    return sNum;
}

0

Додавши до числа 100, запустіть функцію підрядка від індексу 1 до останньої позиції праворуч.

var dt = new Date();
var month = (100 + dt.getMonth()+1).toString().substr(1, 2);
var day = (100 + dt.getDate()).toString().substr(1, 2);

console.log(month,day);

ви отримаєте цей результат з дати 2020-11-3

11,03

Сподіваюся, відповідь буде корисною


-1

Спробуйте наступне, що перетворить одно- та двоцифрові числа в 3-значні числа, ставлячи нулі перед префіксами.

var base_number = 2;
var zero_prefixed_string = ("000" + base_number).slice(-3);

Хоча цей код може запропонувати вирішення питання, краще додати контекст щодо того, чому / як це працює. Це може допомогти майбутнім користувачам навчитися та застосувати ці знання до власного коду. Ви також можете отримати позитивні відгуки користувачів у вигляді голосів "за", коли пояснюється код.
borchvm

Відзначено та внесено відповідні зміни.
vivek shirodkar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.