我有两个字符串,应该放在一个字符串中。第一个字符串是输入值,第二个字符串是第一个字符串应该看起来的模式。
这是示例 -
输入字符串(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 。
请帮助我。
答案 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
在开头和结尾都被删除了所有空格。
答案 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
一旦理解了正则表达式,就可以使用任何模式和掩码。