我需要在输入表单字段时格式化电话号码。我有一个丑陋但工作的js,我继承了,但是想在jquery中这样做,并且必须处理两种不同的电话号码格式。
例如,巴西的所有陆地线都使用以下格式: (123)1234-1234
然而,手机号码只是在前缀中添加了另一个数字: (123)12345-1234
理想情况下,我想让这个脚本接收一个语言变量来决定格式,也许是一个类名。
<input class='formatMobilePhone PT' id='mobilePhone'>
目前我使用的脚本使用光标位置来确定数字的格式,但我无法理解如何让jquery更加雄辩地执行相同的过程。
这是当前的脚本和html。
HTML
<input type="text" name="cellPhone" id="cellPhone" value="" size="32" onkeydown="javascript:backspacerDOWN(this,event);" onkeyup="javascript:backspacerUP(this,event);">
JS
var zChar = [' ', '(', ') ', '-', '.'];
var maxphonelength = 16;
var phonevalue1;
var phonevalue2;
var cursorposition;
function ParseForNumber1(object) {
phonevalue1 = ParseChar(object.value, zChar);
}
function ParseForNumber2(object) {
phonevalue2 = ParseChar(object.value, zChar);
}
function backspacerUP(object, e) {
if (e) {
e = e;
} else {
e = window.event;
}
if (e.which) {
var keycode = e.which;
} else {
var keycode = e.keyCode;
}
ParseForNumber1(object);
if (keycode >= 48) {
ValidatePhone(object);
}
}
function backspacerDOWN(object, e) {
if (e) {
e = e;
} else {
e = window.event;
}
if (e.which) {
var keycode = e.which;
} else {
var keycode = e.keyCode;
}
ParseForNumber2(object);
}
function GetCursorPosition() {
var t1 = phonevalue1;
var t2 = phonevalue2;
var bool = false;
for (i = 0; i < t1.length; i++) {
if (t1.substring(i, 1) != t2.substring(i, 1)) {
if (!bool) {
cursorposition = i;
bool = true;
}
}
}
}
function ValidatePhone(object) {
var p = phonevalue1;
p = p.replace(/[^\d]*/gi, "");
if (p.length < 3) {
object.value = p;
} else if (p.length == 3) {
pp = p;
d4 = p.indexOf('(');
d5 = p.indexOf(') ');
if (d4 == -1) {
pp = "(" + pp;
}
if (d5 == -1) {
pp = pp + ") ";
}
object.value = pp;
} else if (p.length > 3 && p.length < 7) {
p = "(" + p;
l30 = p.length;
p30 = p.substring(0, 4);
p30 = p30 + ") ";
p31 = p.substring(4, l30);
pp = p30 + p31;
object.value = pp;
} else if (p.length >= 7) {
p = "(" + p;
l30 = p.length;
p30 = p.substring(0, 4);
p30 = p30 + ") ";
p31 = p.substring(4, l30);
pp = p30 + p31;
l40 = pp.length;
p40 = pp.substring(0, 11);
p40 = p40 + "-";
p41 = pp.substring(11, l40);
ppp = p40 + p41;
object.value = ppp.substring(0, maxphonelength);
}
GetCursorPosition();
if (cursorposition >= 0) {
if (cursorposition === 0) {
cursorposition = 2;
} else if (cursorposition <= 2) {
cursorposition = cursorposition + 1;
} else if (cursorposition <= 5) {
cursorposition = cursorposition + 2;
} else if (cursorposition == 6) {
cursorposition = cursorposition + 2;
} else if (cursorposition == 7) {
cursorposition = cursorposition + 4;
e1 = object.value.indexOf(') ');
e2 = object.value.indexOf('-');
if (e1 > -1 && e2 > -1) {
if (e2 - e1 == 4) {
cursorposition = cursorposition - 1;
}
}
} else if (cursorposition < 11) {
cursorposition = cursorposition + 3;
} else if (cursorposition == 11) {
cursorposition = cursorposition + 1;
} else if (cursorposition >= 12) {
cursorposition = cursorposition;
}
var txtRange = object.createTextRange();
txtRange.moveStart("character", cursorposition);
txtRange.moveEnd("character", cursorposition - object.value.length);
txtRange.select();
}
}
function ParseChar(sStr, sChar) {
if (sChar.length === null) {
zChar = [sChar];
} else {
zChar = sChar;
}
for (i = 0; i < zChar.length; i++) {
sNewStr = "";
var iStart = 0;
var iEnd = sStr.indexOf(sChar[i]);
while (iEnd != -1) {
sNewStr += sStr.substring(iStart, iEnd);
iStart = iEnd + 1;
iEnd = sStr.indexOf(sChar[i], iStart);
}
sNewStr += sStr.substring(sStr.lastIndexOf(sChar[i]) + 1, sStr.length);
sStr = sNewStr;
}
return sNewStr;
}
我想使用正则表达式,但没有很好地掌握它,我不是在寻找'你能给我代码吗',我想更好地理解这个过程。