【问题标题】:Adding pad spacing to string within javascript在javascript中将填充间距添加到字符串
【发布时间】:2013-09-02 10:36:12
【问题描述】:

我有一个应用程序将变量发送到另一个系统,该系统要求变量为 16 个字符。但是,用户不需要输入 16 位数字。

这是我目前的编码:

在文件内激活javascript:

<A HREF="javascript:onClick=creditlink()" title="Enter own credit memo number.">Create Credit Memo</a>

这是我正在使用的 javascript:

function creditlink ()
{
var cmnum2 = document.getElementById('creditmemo').value;
var cmnum = document.getElementById('autocmnum').value;
var clmid = document.getElementById('claimid').value;
//alert (cmnum);
if (cmnum2) {


window.open("https://somewebpage.cfm?creditmemos=" + cmnum2 + "&claimid=" +clmid );
}
//This is the customer did not want to enter their own number one would be auto generated
else {

window.open("https://somewebpage.cfm?creditmemos=" + cmnum + "&claimid=" +clmid );

}

}

所以在这里我需要对 cmnum2 的帮助,我需要将其转换为 16 个字符,然后才能在链接中发送。仅供参考,此功能效果很好。

所以我的想法是在值之前添加空格填充以等于 16 个字符。这是我需要的示例:

用户输入:cmnum2 = "61150331"(8 个字符) 新值:cmnum2 = "(8个空格)61150331"(共16个字符,带空格)

我相信我已经看到它使用 string.format 或 string padleft 或 padright 之类的函数完成了,但我不确定无论值是什么编码格式如何使其变为 16。

【问题讨论】:

  • 第一个也是最好的建议:Java 与 javascript 不同。
  • 是的,是 Java 还是 Javascript?我假设是javascript,代码。
  • 是的,很抱歉它是 javascript

标签: javascript padding


【解决方案1】:

这是一种可能的解决方案。请注意,如果字符串已经是 16 个(或更多)字符,则永远不会进入 for 循环。

function padTo16Chars(string) {
    var length = string.length;
    var newString = "";
    for (var index = 0; index < (16 - length) ; index++) {
        newString = newString + " ";
    }
    string = newString + string;
}

为此,请在您的 creditlink 方法中调用此方法,如下所示:

function creditlink ()
{
    var cmnum2 = document.getElementById('creditmemo').value;
    padTo16Chars(cmnum2);
    //Other stuff
}

编辑:填充在值之后,现在在之前。

【讨论】:

    【解决方案2】:

    实现此目的的一种简单方法是使用 while 循环:

    while (cmnum2.length < 16) {
       cmnum2 = " " + cnmun2
    }
    

    但是您可能希望将其放在函数中并返回带有空格的新字符串。

    var cmnum2 = "09872";
    
    var num = function(cmnum2){
        while (cmnum2.length < 16) {
          cmnum2 = " " + cmnum2;
        }
        return cmnum2;
    };
    
    console.log(num(cmnum2)); //"(11spaces)09872"
    

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      这是一个使用 ES6 (Harmony) 函数的示例,String.prototype.repeat。我已经为你包含了 polyfils,或者你可以使用ES6 shim。无论如何,这只是进一步说明可以做什么以及将成为标准的示例。

      Javascript

      // ES6 - Harmony polyfils
      if (typeof Math.sign !== "function") {
          Math.sign = function (n) {
              if (n < 0) {
                  return -1;
              }
      
              return 1;
          };
      }
      
      if (typeof Number.toInteger !== "function") {
          Number.toInteger = function (value) {
              var n = +value;
      
              if (isNaN(n)) {
                  return +0;
              }
      
              if (n === 0 || !isFinite(n)) {
                  return n;
              }
      
              return Math.sign(n) * Math.floor(Math.abs(n));
          }
      }
      
      if (typeof String.prototype.repeat !== "function") {
          String.prototype.repeat = (function () {
              var repeat = function (s, times) {
                  if (times < 1) {
                      return "";
                  }
      
                  if (times % 2) {
                      return repeat(s, times - 1) + s;
                  }
      
                  var half = repeat(s, times / 2);
      
                  return half + half;
              };
      
              return function (times) {
                  times = Number.toInteger(times);
                  if (times < 0 || times === Infinity) {
                      throw new RangeError();
                  }
      
                  return repeat(String(this), times);
              };
          }());
      }
      
      // Helper function
      function clamp(num, min, max) {
          return Math.min(Math.max(num, min), max);
      };
      
      // The padding function
      function pad(userString) {
          return " ".repeat(clamp(16 - userString.length, 0, 16)) + userString;
      }
      
      // Example usage
      var input = "12345",
          output = pad(input);
      
      console.log(input, input.length, output, output.length);
      

      输出

      12345 5            12345 16 
      

      开启jsfiddle

      【讨论】:

        【解决方案4】:

        我真的很喜欢 Xotic750 的回答。不过我还有别的东西:

        /**
         * @description Pads given string 
         * @param {string} s The string to pad
         * @param {number} n The amount of spaces to pad
         * @returns {string} Left padded string.
         * @todo check parameters' types and allowed values, undefined, etc.
         */
        function padLeft(s,n) {
            return ((s.length >= n) ? s : (new Array(n - s.length)).join(" ") + s);
        }
        

        这是一个非常简单的解决方案...

        【讨论】:

        • 谢谢。我在我的代码中使用了它。我认为这里有一个小错误:new Array(n - s.length)。应该是new Array(n - s.length + 1)。
        猜你喜欢
        • 2012-04-21
        • 2019-07-26
        • 2011-08-10
        • 1970-01-01
        • 2011-03-08
        • 1970-01-01
        • 2015-12-27
        • 1970-01-01
        • 2014-05-24
        相关资源
        最近更新 更多