使用循环将两个字符串字符排列成一个字符串

时间:2012-12-10 06:15:29

标签: javascript jquery string algorithm loops

我有两个字符串,应该放在一个字符串中。第一个字符串是输入值,第二个字符串是第一个字符串应该看起来的模式。
这是示例 -
输入字符串(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;
                }

这段代码的问题在于它错过了一个数字。此代码的结果是
startValue - (965)688-2
请帮助我。

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分: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

一旦理解了正则表达式,就可以使用任何模式和掩码。