开发者问题收集

Javascript 替换显示未定义错误!

2011-06-20
6306

朋友们,我取得了相当大的成功,但在替换时出现了未定义的错误:

这是我的新代码:

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();
2个回答

您在创建变量 newaltr 之前就使用了它。

代码的另一个问题是,您在循环中进行替换,但您在一个变量上执行替换并将结果存储在另一个变量中。您将始终在原始变量上进行替换,因此仅使用最后一次替换。

您在 avidno 中使用字符串的长度来确定要进行多少次替换,这似乎不合逻辑。

Guffa
2011-06-20

未定义错误是由以下行引起的:

document.body.innerHTML = newaltr;

newaltr 尚未定义,但您正尝试使用它来设置正文的 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...

James Hill
2011-06-20