2012-01-30 91 views
2

我正在使用javascript函數,我剛剛發現了一個liitle問題。我希望函數將「進入」替換爲「」,因此我使用:coment = coment.replace(/\\n/gi,"*#*");,當coment確實有任何「輸入」但當註釋沒有任何「輸入」或註釋是空白,它停止工作,並將它說的錯誤:JavaScript替換函數

「NoneType」對象有沒有屬性「取代」

如何控制,如果有任何「進入」,它取代了,如果沒有,不做任何事情

的 「COMENT」 來源於此:

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

謝謝!

+0

'coment'從哪裏來?你可以在[jsfiddle](http://jsfiddle.net)中重現這個嗎? – 2012-01-30 16:53:43

回答

3

問題取決於什麼是在COMENT實際。如果COMENT中有一個DOM元素,那麼你就需要從輸入字段的值,所以它有一個字符串:

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

如果該問題是COMENT有時是null或undefined,我會建議檢查首先看是否COMENT中有一個有效的字符串:

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

爲空或未定義的情況下,你也可以只預處理coment這樣的:

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

您可能請注意,我在替換函數中也改變了一些東西。如果您只是試圖替換換行符,則不需要正則表達式定義中的雙反斜槓,因爲在模式中沒有任何字母,所以沒有理由在正則表達式中使用「我」標誌。

要具體瞭解哪些適用,您需要向我們展示獲取值的代碼,以便我們可以看到它的實際內容,或者需要在調試器或console.log中檢查coment看看它裏面有什麼。

2

這聽起來像一個「空白」評論不是一個字符串,但像null而不是,因此它沒有replace函數。

嘗試

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

聲明

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

...說「替換爲反斜線後面的字母n與#字符串的所有部分(不區分大小寫)。如果你的目標是取代換行符,你有一個太多的反斜槓:

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

這本身就不會是問題,雖然從錯誤信息,這聽起來好像有時coment不是ST環,因此沒有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
+0

'\ r {0,1}'=='\ r?' – georg 2012-01-30 17:24:37

+0

@ thg435:是的,它的確如此。由於某種原因,我處於明確模式。 :-) – 2012-01-30 17:25:34