0

我有两根绳子,应该放在一起成为一根绳子。第一个字符串是输入值,第二个字符串是第一个字符串的外观模式。
这是示例 -
输入字符串(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
请帮我。

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 回答