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!
javascript
Chill Web Designs
źródło
źródło
Odpowiedzi:
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"
źródło
pad(85, 5)
równie dobrzepad("85", 5)
.return (str).toString().length < max ? pad("0" + (str).toString(), max) : (str).toString();
.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); }
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.
źródło
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ą
padStart
metodę, która dodaje wiodące znaki do ciągu. Sprawdź MDN tutaj, aby uzyskać informacje na tematString.prototype.padStart()
. Jest teżpadEnd
metoda kończenia znaków.Z ES6 stało się to tak proste, jak:
var n = 123; n.padStart(5, '0'); // returns 00123
źródło
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"
źródło
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
źródło
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ą.
źródło
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) }
źródło
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.
źródło
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? :
źródło
formatting("hi",3); function formatting(str,len) { return ("000000"+str).slice(-len); }
Dodaj więcej zer, jeśli potrzebujesz dużych cyfr
źródło
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ę.
źródło
Wiem, że to stary post, ale oto inny krótki, skuteczny sposób:
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; }
źródło
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
źródło
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);
źródło