0

変数を 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 になるかはわかりません。

4

4 に答える 4

1

これは、ES6 (Harmony) 関数String.prototype.repeatを使用する例です。ポリフィルを含めましたが、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

于 2013-08-29T21:54:25.200 に答える
0

考えられる解決策の 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
}

編集: パディングは値の後にありましたが、現在は前です。

于 2013-08-29T20:36:48.487 に答える