Jquery 数字の左側に0(ゼロ)をセットしてみた

数字の左側にゼロをセットしたいケースはしばしばあります。
例えば「日付」などです。
2022/12/1 と表現することもあれば、2022/12/01と表現することもあります。
ホームページの場合は、桁ずれを防ぐために日付の桁数を区切り文字を入れて10桁で統一するケースが多いです。
そんな場合、数字の左側をゼロで埋める必要があります。
PHPの場合、date()関数やstr_pad()関数等で容易に対応できます。
今回この作業をJqueryで行う必要がありました。
PHPならば容易にできることですが、Jqueryだとどうやって、左側にゼロをうめればよいのか?
いつものごとく調べてやってみました。
今回やりたいこと

入力した数字の左側にJqueryでゼロをセットします。
実際にできたものがこちら

入力欄に数字を入れると下にゼロ付きの数字が表示されます。
結論から言うと、Jqueryで数字の左にゼロをセットできました。
疑問:仕組みはどうやっているの?

色々調べると、JqueryにはPHPのstr_pad()に該当する関数はありませんでした。
なので、工夫して実現する必要がありました。
そのやり方について説明します。
.slice()を使用して実現します

HTMLのソース
<!doctype html><html><head><metacharset="shift_jis"><title>左にゼロをセットする</title><scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script><script>
$(document).ready(function()
{
var no = 0;
noset(no);
$("input").on("input", function()
{
no = $(this).val();
noset(no);
});
functionnoset(no)
{
var disp_no = ("0000" + no).slice(-4);
$("#no").text(no);
$("#disp_no").text(disp_no);
}
});
</script><styletype="text/css">.box
{
padding: 20px;
width: 200px;
margin-right: auto;
margin-left: auto;
border: 4px solid #ddd;
}
</style></head><body><divclass="box"><inputtype="tel"maxlength="3"><br><spanid="no"></span><br><spanid="disp_no"></span></div></body></html>
Code language:HTML, XML(xml)
やっていることは、入力された値の左にゼロをセットするです。
ただ、str_pad()のような関数がないため、.slice()を使用して取り出ししています。
具体的には以下の1文で実現しています。
var disp_no = ("0000" + no).slice(-4);
※noには
Code language:JavaScript(javascript)
パット見、4桁指定だから、slice()に-4を指定しているように見えます。
あながち間違いではありません。
でもここで疑問がわきました。
疑問:slice()ってそもそも何をする関数なの?
調べてみたところ、次のように書かれていました。
指定した位置以降の範囲を取得する。
例えば、liタグ4つあるとして後ろの2つを選択する場合などに使用します。
つまり、グループの範囲指定をする関数です。
では、範囲選択でどうやってゼロを埋めているのでしょうか?
その仕組みについて解説します。
slice()で数字の左にゼロをセットする原理
今回のサンプルは、取得した数字にゼロを足しています。
("0000" + no)
※数字に"0000"
Code language:JavaScript(javascript)
これが何を意味しているのか最初よくわからなかったのですが、意味が理解できると原理がわかりました。
“0000"を加算する意味

これは、javascriptの特性ですが、文字と文字を結合する場合は「+」を使います。
足し算をしているわけではなく、文字結合をしているのです。
その結果この例だと7桁の数字文字列が出来上がります。
slice(-4)を指定することで4桁を抽出

.slice()にマイナス値を指定すると、「後ろから何番目」という意味になります。
今回の例だと、後ろから4番目以降を抽出となるため、結果「0123」が取得できるのです。
“0000"4桁を結合しているのは、最大4桁のためです。
確かにこれならば、左にゼロがセットされた状態で文字列を取り出せます。
なんとも賢い方法です。
最初は見よう見まねで実現できることを確認しましたが、理屈を調べてみるとより深く理解できました。
手法を知っていれば、次回も何とかなりますが、理屈を知っていれば応用をきかせることができます。
興味深く調べることはとても良いことなのです。
注意点:桁数は事前に決めておく必要があります

今回気の付いた点があります。
それは、桁数を事前に決めておかなければいけないということです。
今回の例では5桁以上には左側にゼロが付きません。
5桁で左側にゼロをつけるには、"00000″を結合し、sliceに-5を指定する必要があるからです。
無論、入力数字の桁数がわかれば、流動的に対応することも可能です。
しかしながら、数字の左側にゼロを付けるケースは、あらかじめ桁数が決まっている場合が多いです。
例えば管理コード番号などです。
左側にゼロをつける処理は、桁数を決めておくことも肝要です。
本記事がまたお役に立てば幸いです。