Функция замены JavaScript - PullRequest
       0

Функция замены JavaScript

2 голосов
/ 30 января 2012

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

Объект 'NoneType' не имеет атрибута 'replace'

Как я могу контролировать это, если он есть"введите "он заменяет, если нет, ничего не делает

" отсюда "происходит" * "1010 *

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

Спасибо!

Ответы [ 3 ]

4 голосов
/ 30 января 2012

В выражении

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

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

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

Однако это само по себе не будет проблемой. Из сообщения об ошибке иногда звучит как * coment не является строкой и поэтому не имеет функции * 1012. Возможно, это 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 в регулярном выражении.

3 голосов
/ 30 января 2012

Проблема зависит от того, что актуально в комментариях. Если в 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» в регулярном выражении, поскольку в шаблоне нет букв.

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

2 голосов
/ 30 января 2012

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

Попробуйте

coment= (comment && coment.length>0)?coment.replace(/\\n/gi,"*#*"):coment;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...