ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript_javascript スキルでの sprintf および printf 関数の実装

JavaScript_javascript スキルでの sprintf および printf 関数の実装

WBOY
WBOYオリジナル
2016-05-16 16:18:023223ブラウズ

ほとんどの言語にある sprintf / printf 関数を JavaScript で実装します。

http://www.webtoolkit.info/javascript-sprintf.html: sprintf 関数の比較的完全なシミュレーション。利用可能なフォーマットのワイルドカード:
1.%% - パーセント記号自体を返します
2.%b - 2 進数
3.%c - ASCII 対応文字
4.%d - 整数
5.%f - 浮動小数点数
6.%o - 8 進数
7.%s - 文字列
8.%x - 16 進数 (小文字形式)
9.%X - 16 進数 (大文字形式)

% 記号とワイルドカード文字の間で使用可能なオプションは次のとおりです (例: %.2f):

1. (正と負の数値の記号として数値の前に - 記号を表示します。デフォルトでは、負の数値のみに - 記号が表示されます)
2.- (変数を左揃え)
3.0 (右揃えのパディング文字として 0 を使用)
4.[0-9] (変数の最小幅を設定します)
5..[0-9] (浮動小数点精度または文字列長を設定)

コードをコピー コードは次のとおりです:

/**
*
* Javascript sprintf
* http://www.webtoolkit.info/
*
*
**/

sprintfWrapper = {

init : function () {

if (引数の種類 == "未定義") { return null; }
    if (arguments.length     if (引数の種類[0] != "文字列") { null を返します。 }
    if (typeof RegExp == "未定義") { return null; }

var string = 引数[0];
    var exp = new RegExp(/(%([%]|(-)?( |x20)?(0)?(d )?(.(d)?)?([bcdfosxX])))/g);
    varmatches = new Array();
    var strings = new Array();
    var convCount = 0;
    var stringPosStart = 0;
    var stringPosEnd = 0;
    var matchPosEnd = 0;
    var newString = '';
    var match = null;

while (match = exp.exec(string)) {
      if (match[9]) { convCount = 1; }

stringPosStart = matchPosEnd;
      stringPosEnd = exp.lastIndex - match[0].length;
      strings[strings.length] = string.substring(stringPosStart, stringPosEnd);

matchPosEnd = exp.lastIndex;
      一致[一致.長さ] = {
        一致: 一致[0]、
        左: match[3] ? true : false、
        符号: 一致[4] || ''、
        パッド: 一致[5] || ' '、
        最小: 一致[6] || 0、
        精度: match[8]、
        コード: 一致[9] || '%'、
        負の場合: parseInt(arguments[convCount]) < 0 ? true : false、
        引数: String(arguments[convCount])
      };
    }
    strings[strings.length] = string.substring(matchPosEnd);

if (matches.length == 0) { 文字列を返します。 }
    if ((arguments.length - 1) < convCount) { return null; }

var code = null;
    var match = null;
    var i = null;

for (i=0; i

if (matches[i].code == '%') { substitution = '%' }
      else if (matches[i].code == 'b') {
        matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(2));
        substitution = sprintfWrapper.convert(matches[i], true);
      }
      else if (matches[i].code == 'c') {
        matches[i].argument = String(String.fromCharCode(parseInt(Math.abs(parseInt(matches[i].argument)))));
        substitution = sprintfWrapper.convert(matches[i], true);
      }
      else if (matches[i].code == 'd') {
        matches[i].argument = String(Math.abs(parseInt(matches[i].argument)));
        置換 = sprintfWrapper.convert(matches[i]);
      }
      else if (matches[i].code == 'f') {
        matches[i].argument = String(Math.abs(parseFloat(matches[i].argument)).toFixed(matches[i].precision ?matches[i].precision : 6));
        置換 = sprintfWrapper.convert(matches[i]);
      }
      else if (matches[i].code == 'o') {
        matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(8));
        置換 = sprintfWrapper.convert(matches[i]);
      }
      else if (matches[i].code == 's') {
        matches[i].argument =matches[i].argument.substring(0,matches[i].precision ?matches[i].precision :matches[i].argument.length)
        substitution = sprintfWrapper.convert(matches[i], true);
      }
      else if (matches[i].code == 'x') {
        matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
        置換 = sprintfWrapper.convert(matches[i]);
      }
      else if (matches[i].code == 'X') {
        matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
        置換 = sprintfWrapper.convert(matches[i]).toUpperCase();
      }
      他 {
        substitution =matches[i].match;
      }

newString = strings[i];
      newString = 置換;

}
    newString = strings[i];

return newString;

}、

変換 : function(match, nosign){
    if (nosign) {
      match.sign = '';
    } else {
      match.sign = match.negative ? '-' : match.sign;
    }
    var l = match.min - match.argument.length 1 - match.sign.length;
    var Pad = new Array(l     if (!match.left) {
      if (match.pad == "0" || nosign) {
        return match.sign パッド match.argument;
      } else {
        リターンパッド match.sign match.argument;
      }
    } else {
      if (match.pad == "0" || nosign) {
        return match.sign match.argument Pad.replace(/0/g, ' ');
      } else {
        return match.sign match.argument パッド;
      }
    }
  }
}

sprintf = sprintfWrapper.init;

追加の書式設定を行わずに位置変数の内容を単純に置き換えたい場合は、比較的単純な YUI ツールで提供される printf を使用できます。

コードをコピーします コードは次のとおりです:

YAHOO.Tools.printf = function() {
var num = argument.length;
var oStr = 引数[0];
for (var i = 1; i var pattern = "\{" (i-1) "\}";
var re = new RegExp(パターン, "g");
oStr = oStr.replace(re, argument[i]);
}
oStr を返します;
}

YAHOO.Tools.printf("表示文字列 {0}, {1}.", "1", "2"); のように使用する場合は、{?} を使用して一致させます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。