Heim > Web-Frontend > js-Tutorial > Hauptteil

Implementierung von Sprintf- und Printf-Funktionen in JavaScript_Javascript-Kenntnissen

WBOY
Freigeben: 2016-05-16 16:18:02
Original
3217 Leute haben es durchsucht

Implementieren Sie die Sprintf-/Printf-Funktionen, die in den meisten Sprachen unter JavaScript zu finden sind.

http://www.webtoolkit.info/javascript-sprintf.html: Eine relativ vollständige Simulation der Sprintf-Funktion. Verfügbare Formatierungsplatzhalter:
1.%% – Gibt das Prozentzeichen selbst zurück
2.%b – Binärzahl
3.%c – ASCII-entsprechendes Zeichen
4.%d – Ganzzahl
5.%f – Gleitkommazahl
6.%o - Oktalzahl
7.%s - Zeichenfolge
8.%x – Hexadezimalzahl (Kleinbuchstabenform)
9.%X – Hexadezimalzahl (Großbuchstabenform)

Zu den verfügbaren Optionen zwischen %-Zeichen und Platzhalterzeichen gehören (z. B. %.2f):

1. (Erzwingen Sie die Anzeige des Und-Zeichens vor der Zahl als Zeichen für positive und negative Zahlen. Standardmäßig zeigen nur negative Zahlen das -Zeichen an)
2.- (Variablen linksbündig)
3.0 (0 als rechtsbündiges Füllzeichen verwenden)
4.[0-9] (Legen Sie die Mindestbreite der Variablen fest)
5..[0-9] (Gleitkommagenauigkeit oder Stringlänge festlegen)

Code kopieren Der Code lautet wie folgt:

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

sprintfWrapper = {

  init : function () {

    if (typeof arguments == "undefiniert") { return null; }
    if (arguments.length < 1) { return null; }
    if (typeof arguments[0] != "string") { return null; }
    if (typeof RegExp == "undefiniert") { return null; }

    var string = arguments[0];
    var exp = new RegExp(/(%([%]|(-)?( |x20)?(0)?(d )?(.(d)?)?([bcdfosxX])))/g);
    var matches = 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;
      Übereinstimmungen[Übereinstimmungen.Länge] = {
        Übereinstimmung: Übereinstimmung[0],
        links: match[3] ? wahr: falsch,
        Zeichen: match[4] || '',
        pad: match[5] || ' ',
        min: match[6] || 0,
        Präzision: match[8],
        Code: match[9] || '%',
        negativ: parseInt(arguments[convCount]) < 0 ? wahr: falsch,
        Argument: String(arguments[convCount])
      };
    }
    strings[strings.length] = string.substring(matchPosEnd);

    if (matches.length == 0) { return string; }
    if ((arguments.length - 1) < convCount) { return null; }

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

    für (i=0; i

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

      newString = strings[i];
      newString = substitution;

    }
    newString = strings[i];

    return newString;

  },

  konvertieren: function(match, nosign){
    if (nosign) {
      match.sign = '';
    } sonst {
      match.sign = match.negative ? '-' : match.sign;
    }
    var l = match.min - match.argument.length 1 - match.sign.length;
    var pad = new Array(l < 0 ? 0 : l).join(match.pad);
    if (!match.left) {
      if (match.pad == "0" || nosign) {
        return match.sign pad match.argument;
      } sonst {
        Return-Pad match.sign match.argument;
      }
    } sonst {
      if (match.pad == "0" || nosign) {
        return match.sign match.argument pad.replace(/0/g, ' ');
      } sonst {
        return match.sign match.argument pad;
      }
    }
  }
}

sprintf = sprintfWrapper.init;

Si vous souhaitez simplement remplacer le contenu de la variable de position sans formatage supplémentaire, vous pouvez utiliser le printf fourni dans les outils YUI relativement simples :

Copier le code Le code est le suivant :

YAHOO.Tools.printf = fonction() {
var num = arguments.longueur;
var oStr = arguments[0];
pour (var je = 1; je < num; je ) {
var modèle = "\{" (i-1) "\}";
var re = new RegExp(motif, "g");
oStr = oStr.replace(re, arguments[i]);
>
retourner oStr;
>

Lorsqu'il est utilisé comme YAHOO.Tools.printf("Display string {0}, {1}.", "1", "2"); utilisez {?} pour faire correspondre.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage