jQueryを使用して数値の前にゼロを追加しますか?


82

そのようにフォーマットされたアップロードされたファイルがあります

MR 1

MR 2

MR 100

MR 200

MR 300

等。

私がする必要があるのは、MR 10の前に200を追加し、MR10-99の前に0を1つ追加することです。

したがって、ファイルはフォーマットされます

MR 001

MR 010

MR 076

等。

どんな助けでも素晴らしいでしょう!


3
jQueryはここでは役に立ちません(少なくともフォーマットに関しては)...しかし、どのようにファイルにアクセスしますか?どうやって内容を入手しますか?どういうわけか、コンテキストは明確ではありません。問題をよりよく理解できるように、少なくともいくつかのコードを提供してください。
Felix Kling 2011年

@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();
レミブルトン2012

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

2
String.prototype.padLeft = function padLeft(length、leadingChar){if(leadingChar === undefined)leadingChar = "0"; this.length <lengthを返しますか?(leadingChar + this).padLeft(length、leadingChar):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つの数字が欲しいですか?コードで-2ではなく-3を使用するだけです。これは、24時間制を非常に簡単に作成したかったためです。


21

注: 参照アップデート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)
}

ただし、パフォーマンスが重要な場合は、提案されたソリューションの1つを選択する前に、リンクされた回答を読むことをお勧めします。

更新2

ES6では、StringクラスpadStartに、文字列に先頭文字を追加する組み込みメソッドが付属するようになりました。参照については、ここMDNを確認してくださいString.prototype.padStart()。また、padEnd文字を終了する方法もあります。

したがって、ES6では次のように簡単になりました。

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

3
改善されたバージョン:function leftPad(value、maxLength){return String( '0'.repeat(maxLength)+ value).slice(-maxLength); }
RWC 2017

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"

言い換えると、文字列に変換してから、ゼロを埋め込みます。
パビウム2011年

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

誰かが2つではなく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

文字列の最後にある数字の前に1つまたは2つのゼロを置き、その前にスペースを置きます。スペースの前のビットは関係ありません。


ドキュメントにMR003が含まれている場合、誰かが0などの追加を無視できるとしたらどうなりますか?
Chill Web Designs 2011年

2

ただ笑うためにそれを長く厄介な方法でやってください.... :(
注:私はこれを使用していません、そして私はこれを使用することをお勧めしません。!)

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

1

先日、自分でこのようなものが必要でした。常に0ではなくPudで、前面に何を埋めたいかを伝えたいと思っていました。これが私がコードのために思いついたものです:

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文字以上の場合は失敗する場合があります。



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

以下を試してください。これにより、ゼロを前に付けて1桁および2桁の数値を3桁の数値に変換します。

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

このコードは質問の解決策を提供するかもしれませんが、なぜ/どのように機能するかについてのコンテキストを追加することをお勧めします。これは、将来のユーザーが学習し、その知識を自分のコードに適用するのに役立ちます。また、コードが説明されると、賛成票の形でユーザーから肯定的なフィードバックが得られる可能性があります。
borchvm

それに応じて注記および修正されました。
vivekshirodkar20年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.