-4
function clean(e){
    var textfield = document.getElementById(e);
    var regex = /[^a-z 1-9 ,.!?-`'"()\r\n   ]/gi;
    var wrongWords = new Array("can't", "I", "won't");
    var rightWords =  new Array("can not", "people", "will not");
    var x = 0
    if(textfield.value.search(regex) > -1) {
        document.getElementById('status').innerHTML = "We found invalid characters";
        textfield.value = textfield.value.replace(regex, "");
    }
    while(textfield.value.search(wrongWords) === true){
        textfield.value = textfield.value.replace(wrongWords[x], rightWords[x]);
        x++;
    }
}

while 语句有什么问题。我怎样才能让它工作?

4

2 回答 2

0

检查搜索是否返回 -1 但不是真的。

http://www.w3schools.com/jsref/jsref_search.asp

于 2013-05-06T21:13:05.657 回答
0

var wrongWords = new Array("can't", "I", "won't");
...
... textfield.value.search(wrongWords) ...

您正在调用searchwhich 需要一个正则表达式,但正在获取一个单词数组,因此它最终会搜索一个正则表达式,就像/can't,I,won't/因为将一个数组强制为 a 会RegExp调用toStringjoins 的数组方法","

您可以验证

RegExp(["foo", "bar"]).source === "foo,bar"

也许

textfield.value.search(wrongWords[x])

会更接近你想要的,但它与整个单词不匹配。它会在“MMXIII 年,...”中找到“我”

为了解决这个问题,您可以尝试边界检查:

textfield.value.search("\\b" + wrongWords[x] + "\\b")
于 2013-05-06T21:15:29.130 回答