Javascript之sprintf

來源:互聯網
上載者:User
/****  Javascript sprintf*  http://www.webtoolkit.info/**  %% – Returns a percent sign*  %b – Binary number*  %c – The character according to the ASCII value*  %d – Signed decimal number*  %f – Floating-point number*  %o – Octal number*  %s – String*  %x – Hexadecimal number (lowercase letters)*  %X – Hexadecimal number (uppercase letters)***/sprintfWrapper = {init : function () {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 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;matches[matches.length] = {match: match[0],left: match[3] ? true : false,sign: match[4] || '',pad: match[5] || ' ',min: match[6] || 0,precision: match[8],code: match[9] || '%',negative: parseInt(arguments[convCount]) < 0 ? true : false,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;for (i=0; i<matches.length; 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)));substitution = 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));substitution = sprintfWrapper.convert(matches[i]);}else if (matches[i].code == 'o') {matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(8));substitution = 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));substitution = sprintfWrapper.convert(matches[i]);}else if (matches[i].code == 'X') {matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));substitution = sprintfWrapper.convert(matches[i]).toUpperCase();}else {substitution = matches[i].match;}newString += strings[i];newString += substitution;}newString += strings[i];return newString;},convert : 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 < 0 ? 0 : l).join(match.pad);if (!match.left) {if (match.pad == "0" || nosign) {return match.sign + pad + match.argument;} else {return pad + 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 + pad;}}}}sprintf = sprintfWrapper.init;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.