Maison  >  Article  >  interface Web  >  Implémentation des fonctions sprintf et printf dans les compétences JavaScript_javascript

Implémentation des fonctions sprintf et printf dans les compétences JavaScript_javascript

WBOY
WBOYoriginal
2016-05-16 16:18:023197parcourir

Implémentez les fonctions sprintf/printf que l'on trouve dans la plupart des langages​​sous JavaScript.

http://www.webtoolkit.info/javascript-sprintf.html : Une simulation relativement complète de la fonction sprintf. Caractères génériques de formatage disponibles :
1.%% - Renvoie le signe de pourcentage lui-même
2.%b - Nombre binaire
3.%c - Caractère correspondant ASCII
4.%d - entier
5.%f - nombre à virgule flottante
6.%o - Nombre octal
7.%s - chaîne
8.%x - nombre hexadécimal (forme de lettre minuscule)
9.%X - nombre hexadécimal (forme de lettre majuscule)

Les options disponibles entre les signes % et les caractères génériques incluent (par exemple %.2f) :

1. (Forcer l'affichage du signe et - devant le nombre comme signe des nombres positifs et négatifs. Par défaut, seuls les nombres négatifs affichent le signe -)
2.- (variables alignées à gauche)
3.0 (utilisez 0 comme caractère de remplissage aligné à droite)
4.[0-9] (Définir la largeur minimale de la variable)
5..[0-9] (Définir la précision en virgule flottante ou la longueur de la chaîne)

Copier le code Le code est le suivant :

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

sprintfWrapper = {

  init : fonction () {

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

    var string = arguments[0];
    var exp = new RegExp(/(%([%]|(-)?( |x20)?(0)?(d )?(.(d)?)?([bcdfosxX])))/g);
    var correspond = new Array();
    var chaînes = new Array();
    var convCount = 0;
    var stringPosStart = 0;
    var stringPosEnd = 0;
    var matchPosEnd = 0;
    var nouvelleChaîne = '';
    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;
      matches[matches.length] = {
        correspondance : match[0],
        à gauche : match[3] ? vrai : faux,
        signe : match[4] || '',
        pad : match[5] || ' ',
        min : match[6] || 0,
        précision : match[8],
        code : match[9] || '%',
        négatif : parseInt(arguments[convCount]) < 0 ? vrai : faux,
        argument : String(arguments[convCount])
      };
    >
    strings[strings.length] = string.substring(matchPosEnd);

    if (matches.length == 0) { chaîne de retour ; >
    if ((arguments.length - 1) < convCount) { return null; >

    var code = null;
    var match = null;
    var je = nul;

    pour (i=0; i

      if (matches[i].code == '%') { substitution = '%' }
      sinon if (matches[i].code == 'b') {
        matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(2));
        substitution = sprintfWrapper.convert(matches[i], true);
      >
      sinon if (matches[i].code == 'c') {
        matches[i].argument = String(String.fromCharCode(parseInt(Math.abs(parseInt(matches[i].argument)))));
        substitution = sprintfWrapper.convert(matches[i], true);
      >
      sinon if (matches[i].code == 'd') {
        matches[i].argument = String(Math.abs(parseInt(matches[i].argument)));
        substitution = sprintfWrapper.convert(matches[i]);
      >
      sinon if (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]);
      >
      sinon if (matches[i].code == 'o') {
        matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(8));
        substitution = sprintfWrapper.convert(matches[i]);
      >
      sinon 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);
      >
      sinon if (matches[i].code == 'x') {
        matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
        substitution = sprintfWrapper.convert(matches[i]);
      >
      sinon if (matches[i].code == 'X') {
        matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
        substitution = sprintfWrapper.convert(matches[i]).toUpperCase();
      >
      sinon {
        substitution = matches[i].match;
      >

      newString = chaînes[i];
      newString = substitution;

    }
    newString = chaînes[i];

    return newString;

  },

 convertir : fonction(match, nosign){
    si (pas de signe) {
      match.sign = '';
    } autre {
      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);
    si (!match.left) {
      if (match.pad == "0" || nosign) {
        return match.sign pad match.argument;
      } autre {
        return pad match.sign match.argument;
      >
    } autre {
      if (match.pad == "0" || nosign) {
        return match.sign match.argument pad.replace(/0/g, ' ');
      } autre {
        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.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn