2012-01-30 5 views
2

Я работаю с функцией javascript, и у меня есть проблема с литер. Я хочу, чтобы функция заменила «вводит» на «#», поэтому я использую: coment = coment.replace(/\\n/gi,"*#*");, и он отлично работает, когда у coment есть «ввод», но когда в комментарии нет «ввода», или комментарий пустой, он перестает работать, и посылает ошибку, которая говорит:JavaScript Заменить функцию

объект «NoneType» не имеет атрибута «заменить»

Как я могу контролировать, что, если он имеет какие-либо «ввести» он заменяет, если нет, то не делает сделать что-нибудь

"Coment" происходит от этого:

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

Спасибо!

+0

Откуда берутся? Можете ли вы воспроизвести это в [jsfiddle] (http://jsfiddle.net)? –

ответ

3

Проблема зависит от того, что актуально в Coment. Если Coment имеет DOM элемент в ней, то вам нужно получить значение из поля ввода, так что есть строка:

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

Если проблема в том, что Coment иногда нулевая или неопределенная, я бы предложил проверить первый, чтобы увидеть, если Coment имеет допустимую строку в ней:

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

для нулевого или неопределенного случае, вы также можете просто обусловите coment так:

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

вы можете Заметьте, что я изменил пару вещей и в функции замены. Если вы просто пытаетесь заменить символ новой строки, вам не нужна двойная обратная косая черта внутри определения регулярного выражения, и нет никакого смысла для флага «i» в регулярном выражении, так как у вас нет букв в шаблоне.

Чтобы узнать конкретно, какое из них применимо, вам нужно будет показать нам код, который получает значение в комете, чтобы мы могли видеть, что на самом деле имеет в нем, или вам нужно изучить коммант в отладчике или console.log. увидеть, что у него есть.

2

Это звучит как «пустой» комментарий, это не строка, а нечто вроде null, поэтому у него нет функции replace.

Попробуйте

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

Заявление

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

... говорит «заменить все части строки, которые являются обратный слеш с последующей буквой п с # (чувствительно к регистру). Если ваша цель состоит в том, чтобы заменить новой строки, у вас есть один слишком много обратной косой черты:.

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 в регулярном выражении.

+0

'\ r {0,1}' == '\ r?' – georg

+0

@ thg435: Да, это так. По какой-то причине я был в явном режиме. :-) –