Dodanie dodatkowych zer przed liczbą za pomocą jQuery?

82

Mam przesłane pliki, które są tak sformatowane

MR 1

MR 2

MR 100

MR 200

MR 300

ITP.

Muszę dodać dodatkowe dwie 00 przed cokolwiek przed MR 10 i jedno dodatkowe 0 przed MR10-99

Więc pliki są formatowane

MR 001

MR 010

MR 076

ITP.

Każda pomoc byłaby świetna!

Chill Web Designs
źródło
3
jQuery nie pomoże Ci tutaj (przynajmniej nie w kwestii formatowania) ... ale jak uzyskać dostęp do pliku? Jak otrzymujesz jego zawartość? Jakoś kontekst nie jest jasny. Podaj przynajmniej trochę kodu, abyśmy mogli lepiej zrozumieć problem.
Felix Kling
@FelixKling Pliki nie są istotne. Pyta o formatowanie.
felwithe

Odpowiedzi:

215

Zakładając, że masz te wartości zapisane w niektórych ciągach, spróbuj tego:

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"
Todd Yandell
źródło
3
Wiem, że to stare, ale ta funkcja pomogła mi i pomyślałem, że dodam do niej. Spowoduje to konwersję typu dla zmiennych całkowitych lub zmiennoprzecinkowych, co oznacza, że ​​możesz to zrobić pad(85, 5)równie dobrze pad("85", 5). return (str).toString().length < max ? pad("0" + (str).toString(), max) : (str).toString();
Rémi Breton
7
@ RémiBreton Twoja funkcja używa zbyt wiele razy .toString(). Myślę, że byłoby lepiejfunction pad (str, max) { str=str.toString(); function main(str,max){ return str.length < max ? main("0" + str, max) : str; } return main(str,max); }
Oriol,
2
String.prototype.padLeft = function padLeft (length, leadChar) {if (leadChar === undefined) leadChar = "0"; return this.length <length? (wiodący znak + to) .padLeft (długość, wiodący znak): to; };
Tim Valentine
35

Mam potencjalne rozwiązanie, które wydaje mi się istotne, zamieściłem o nim tutaj:

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

zasadniczo chcesz mieć minimalną długość 2 lub 3, możesz dostosować, ile 0 wstawisz w tym fragmencie kodu

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);

Wiedziałem, że zawsze otrzymam co najmniej jedną liczbę całkowitą (przyczyna: godzina 1, godzina 2) itd., Ale jeśli nie możesz być pewien, że otrzymasz cokolwiek poza pustym ciągiem, możesz po prostu wykonać „000” + d.getHours ( ), aby mieć pewność, że otrzymasz minimum.

to chcesz 3 liczby? po prostu użyj -3 zamiast -2 w moim kodzie, piszę to, ponieważ chciałem zbudować 24-godzinny zegar w super łatwy sposób.

Christopher Thomas
źródło
21

Uwaga: zobacz Aktualizacja 2, jeśli używasz najnowszego ECMAScript ...


Tutaj rozwiązanie, które podobało mi się ze względu na swoją prostotę z odpowiedzi na podobne pytanie :

var n = 123

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

AKTUALIZACJA

Jak zasugerował @RWC, możesz oczywiście ładnie opakować to w ogólną funkcję, taką jak ta:

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

leftPad(123, 5); // returns 00123

A dla tych, którzy nie lubią plastra:

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

Jeśli jednak liczy się wydajność, przed wybraniem jednego z sugerowanych rozwiązań zalecamy przeczytanie połączonej odpowiedzi.

AKTUALIZACJA 2

W ES6 klasa String ma teraz wbudowaną padStartmetodę, która dodaje wiodące znaki do ciągu. Sprawdź MDN tutaj, aby uzyskać informacje na temat String.prototype.padStart(). Jest też padEndmetoda kończenia znaków.

Z ES6 stało się to tak proste, jak:

var n = 123;
n.padStart(5, '0'); // returns 00123
Więdnąć
źródło
3
Ulepszona wersja: function leftPad (value, 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"
MadBender
źródło
Innymi słowy: zamień go na łańcuch, a następnie uzupełnij zerami .
pavium
4

Jest to funkcja, której zwykle używam w moim kodzie, aby poprzedzać zera liczbę lub ciąg.

Dane wejściowe to łańcuch lub liczba (str) i żądana długość wyjścia (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;
}

};

Przykłady:

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
Davan Etelamaki
źródło
2

Jeśli podzielisz spację, możesz dodać wiodące zera za pomocą prostej funkcji, takiej jak:

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

Możesz więc przetestować długość łańcucha i jeśli jest mniejsza niż 6, podziel ją na spację, dodaj zera do liczby, a następnie połącz ją ponownie.

Lub jako wyrażenie regularne:

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

Jestem pewien, że ktoś może to zrobić z jedną wymianą, a nie dwoma.

Edycja - przykłady

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

Umieści jedno lub dwa zera przed liczbą na końcu łańcucha ze spacją przed nią. Nie obchodzi go, co jest przed przestrzenią.

RobG
źródło
Co się stanie, jeśli ktoś powie, że dokument ma MR 003, czy możemy zignorować dodawanie zer itp.
Chill Web Designs
2

Tylko dla śmiechu, zrób to w długi, paskudny sposób ....:
(UWAGA: nie używałem tego i nie radziłbym tego używać.!)

function pad(str, new_length) {
    ('00000000000000000000000000000000000000000000000000' + str).
    substr((50 + str.toString().length) - new_length, new_length)
}
user2992783
źródło
1

Sam kiedyś potrzebowałem czegoś takiego, pud zamiast zawsze 0, chciałem móc powiedzieć, co chcę wyściełać przód. Oto, co wymyśliłem dla kodu:

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; }

Gdzie n jest tym, co chcesz dopełnić, e jest mocą, do której chcesz dopełnić (liczba znaków powinna być), a d jest tym, czym chcesz, aby było wypełnione. Wydaje się, że działa dobrze do tego, do czego go potrzebowałem, ale w niektórych przypadkach nie powiedzie się, jeśli „d” będzie dłuższe niż jeden znak.

Szewc
źródło
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);

U mnie zadziałało! Aby zwiększyć zera, zaktualizuj zmienną „ max

Działający URL Fiddle: Dodanie dodatkowych zer przed liczbą za pomocą jQuery? :

Karthikeyan Baskaran
źródło
1

str może być liczbą lub łańcuchem.

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

Dodaj więcej zer, jeśli potrzebujesz dużych cyfr

Amal Kalutotage
źródło
0

W prostych słowach możemy napisać następująco:

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

// Ponieważ przez większość czasu potrzebujemy tego na dzień, miesiąc lub kwotę.

Ramasamy Kasi
źródło
0

Wiem, że to stary post, ale oto inny krótki, skuteczny sposób: zera

edycja: dur. jeśli num nie jest ciągiem znaków, możesz dodać:

len -= String(num).length;

inaczej, wszystko jest w porządku

function addLeadingZeros(sNum, len) {
    len -= sNum.length;
    while (len--) sNum = '0' + sNum;
    return sNum;
}
Todd
źródło
0

Dodając 100 do liczby, uruchom funkcję podciągu od indeksu 1 do ostatniej pozycji po prawej stronie.

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);

wynik ten uzyskasz od dnia 2020-11-3

11,03

Mam nadzieję, że odpowiedź jest przydatna

Hamid Jolany
źródło
-1

Spróbuj wykonać następujące czynności, które przekonwertują liczby jedno- i dwucyfrowe na liczby trzycyfrowe, poprzedzając zera.

var base_number = 2;
var zero_prefixed_string = ("000" + base_number).slice(-3);
vivek shirodkar
źródło
Chociaż ten kod może zapewnić rozwiązanie tego pytania, lepiej jest dodać kontekst, dlaczego / jak to działa. Może to pomóc przyszłym użytkownikom w nauce i zastosowaniu tej wiedzy we własnym kodzie. Prawdopodobnie otrzymasz również pozytywne opinie użytkowników w postaci głosów za, kiedy kod zostanie wyjaśniony.
borchvm
Zanotowano i odpowiednio zmieniono.
vivek shirodkar