朋友我取得了相当大的成功,但在替换时出现了一个未定义的错误:
这是我的新代码:
var avidno = '(800)123 1234';
var bodytext = document.body.innerHTML;
function validate () {
var regex = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/gi;
if (regex.test(avidno)) {
alert('bingo');
var altrstr = '<span>'+avidno+'</span>';
//var newaltr = bodytext.replace(avidno, altrstr);
//var str_count = bodytext.match(avidno).length; //4 matched
document.body.innerHTML = newaltr;
alert(avidno.length);
find_count = avidno.length;
for(var i=0;i<find_count;i++)
{
var newaltr = bodytext.replace(avidno, altrstr);
}
// Valid international phone number
} else {
alert('uupss');
// Invalid international phone number
}
}
validate();
答案 0 :(得分:2)
您在创建之前使用了变量newaltr
。
代码的另一个问题是你在循环中进行替换,但是你在一个变量上执行它并将结果存储在另一个变量中。您将始终在原件上进行更换,因此仅使用最后一次更换。
您正在使用avidno
中字符串的长度来确定要执行的替换次数,这似乎不符合逻辑。
答案 1 :(得分:0)
未定义的错误是由以下行引起的:
document.body.innerHTML = newaltr;
newaltr 尚未定义,但您尝试使用它设置body的innerHTML。还有其他问题需要解决。例如,这一行:
var newaltr = bodytext.replace(avidno, altrstr);
每次进行循环时,都会覆盖newaltr的先前值。如果你试图追加(我不确定),那么正确的语法是:
newaltr += bodytext.replace(avidno, altrstr);
修改强>
正如我的帖子和其他人所提到的,你的逻辑有几个问题。除了逻辑问题,我认为你的方法是不正确的。看看下面的问题(实际上,标记为答案的响应),它应该让你指向正确的方向。
https://stackoverflow.com/questions/1444409/in-javascript-how-can-i-replace-text-in...