JavaScript替换功能

时间:2012-01-30 16:52:32

标签: javascript replace

我正在使用javascript函数,我只是遇到了问题。我希望函数将“输入”替换为“”,因此我使用:coment = coment.replace(/\\n/gi,"*#*");并且当coment确实有任何“输入”但是当评论没有任何“输入”,或评论为空白,它停止工作并发送错误说:

'NoneType'对象没有属性'replace'

如果它有任何“输入”,它如何替换,如果没有,则不能做任何事情

“coment”来自于:

<textarea id="coment"></textarea>

谢谢!

3 个答案:

答案 0 :(得分:4)

声明

coment = coment.replace(/\\n/gi,"*#*");

...说“替换字符串中反斜杠的所有部分,后跟字母n,(不区分大小写)。如果您的目标是替换换行符,你有一个太多的反斜杠:

coment = coment.replace(/\n/gi,"*#*");
但是,仅此一点不会成为问题。从错误消息中,听起来有时coment不是字符串,因此没有replace函数。可能是undefinednull。如果您知道它将是undefinednull或字符串,则可以执行此操作:

if (coment) {
    coment = coment.replace(/\n/gi,"*#*");
}

如果它可能是一个数字或者某个东西,并且无论你最终想要一个字符串,那么:

coment = (coment === undefined || coment === null)
         ? ""
         : String(coment).replace(/\n/gi,"*#*");

(不要只做coment = coment ? ...,因为如果coment是数字0,则不会给您预期的结果。)


顺便说一句,由于某些浏览器使用\r\n表示换行符而其他浏览器使用\n,因此您最好使用\r?\n(或\r{0,1}\n),而不仅仅是{\n正则表达式中的1}}。

答案 1 :(得分:3)

问题取决于实际情况。如果coment中有一个DOM元素,那么你需要从输入字段中获取值,使它有一个字符串:

coment.value = coment.value.replace(/\n/g,"*#*");

如果问题是coment有时为null或未定义,我建议先检查一下是否有一个有效的字符串:

if (coment) {
    coment = coment.replace(/\n/g,"*#*");
}

对于null或undefined的情况,你也可以像这样预先调节coment

coment = coment || "";
coment = coment.replace(/\n/g,"*#*");

你可能会注意到我在替换功能中也改变了一些东西。如果您只是尝试替换换行符,则不需要在正则表达式定义中使用双反斜杠,并且正则表达式上没有“i”标志,因为模式中没有任何字母。 / p>

要具体了解哪些适用,您需要向我们展示获取值的代码,以便我们可以看到它实际上有什么,或者您需要在调试器或console.log中查看coment以查看它里面有什么。

答案 2 :(得分:2)

这听起来像“空白”评论不是字符串,而是类似null,因此它没有replace函数。

尝试

coment= (comment && coment.length>0)?coment.replace(/\\n/gi,"*#*"):coment;