0

1 つの文字列にまとめる必要がある 2 つの文字列があります。最初の文字列は入力値で、2 番目の文字列は最初の文字列がどのように表示されるかのパターンです。
ここに例があります -
入力文字列( var val ) - 9165678823 パターン
文字列( var mask ) - (999)999-9999
出力文字列は次のようになります( var startVal ) - (916)567-8823
私のコード

            var val = $(control).data("loadMaskValue"); // Input Value
            var mask = $(control).attr("mask");         //Masking Pattern
            var startVal = "";
            var j = 0;

            for (var i = 0; i < mask.length; i++) {
                    var c = mask.charAt(j);
                    if (c == '9' || c == 'X' || c == 'A') {    //Checks the char is normal char 
                        startVal += val.charAt(j);
                    }
                    else {
                        startVal += c;                      //Inserts the special char to string like ( ) -
                        startVal += val.charAt(j);
                    }
                    j = startVal.length;
                }

このコードの問題は、間に 1 つの数字がないことです。このコードの結果は
startValue - (965)688-2です。
私を助けてください。

4

2 に答える 2

3

少し単純な実装を次に示します。

var input = '9165678823';
var mask = '(999)999-9999';

var output = '';
var offset = 0;

for (var i = 0; i < mask.length; i++) {
    var char = mask.charAt(i);

    if ('9XA'.indexOf(char) != -1) {
        output += input.charAt(i - offset);
    } else {
        output += mask.charAt(i);
        offset += 1;
    }
}

console.log(output);

input最初と最後ですべての空白が削除されていることを確認してください。

デモ: http: //jsfiddle.net/qWtjk/

于 2012-12-10T06:21:43.903 に答える
0

正規表現を使用して要素を取り出すことができます。フィドルを確認してください: http://jsfiddle.net/BuddhiP/9MmqS/ var str= '9165678823'; var regEx = new RegExp("(\d{3})(\d{3})(\d{4})");

var m = regEx.exec(str);
var res = '(' + m[1] + ')' + m[2] + '-' + m[3];
console.log(res);

結果は(916)567-8823 です

更新:これを動的パターンで機能させる方法。更新されたフィドルを確認してください: http://jsfiddle.net/BuddhiP/9MmqS/

$(function() {
    var str= '9165678823';
    var regEx = new RegExp("(\\d{3})(\\d{3})(\\d{4})");

    var m = regEx.exec(str);
    var mask = "({0}){1}-{2}";
    var res = mask.supplant(m.slice(1));
    console.log(res);
});​

ここから代替方法を使用する: http://javascript.crockford.com/remedial.html

正規表現を理解すれば、任意のパターンとマスクでこれを機能させることができます。

于 2012-12-10T06:22:39.893 に答える