我正在使用javascript函数,我只是遇到了问题。我希望函数将“输入”替换为“#”,因此我使用:coment = coment.replace(/\\n/gi,"*#*");
并且当coment确实有任何“输入”但是当评论没有任何“输入”,或评论为空白,它停止工作并发送错误说:
'NoneType'对象没有属性'replace'
如果它有任何“输入”,它如何替换,如果没有,则不能做任何事情
“coment”来自于:
<textarea id="coment"></textarea>
谢谢!
答案 0 :(得分:4)
声明
coment = coment.replace(/\\n/gi,"*#*");
...说“替换字符串中反斜杠的所有部分,后跟字母n,#(不区分大小写)。如果您的目标是替换换行符,你有一个太多的反斜杠:
coment = coment.replace(/\n/gi,"*#*");
但是,仅此一点不会成为问题。从错误消息中,听起来有时coment
不是字符串,因此没有replace
函数。可能是undefined
或null
。如果您知道它将是undefined
,null
或字符串,则可以执行此操作:
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;