2015-10-26 5 views
0

Я пытаюсь сравнить две равные строки: значение textarea (или textContent, или innerHTML) и строку, сохраненную в качестве атрибута в модели Backbone. "A string↵with line break". И это сравнение всегда возвращает false.
Сравнивая длину этих строк, вы обнаружите разницу (сохраненный один символ длиннее). Вопрос заключается в том, как подготовить первую строку (извлеченную из textarea), чтобы она была полностью равна второй (сохраненной в модели).JS сравнение строк с разрывами строк

P.S. Они оба - typeof === 'string'.

P.P.S. Основная проблема заключается в том, как сделать опорную планку равной равным при установке атрибута:

this.model.set({ attr: textareaValue }).

Backbone использует метод Underscore, который просто сравнивает две строки в этом случае:

return '' + a === '' + b;

Я применил encodeURIComponent на обеих строках: результат Some%0Atext против Some%0D%0Atext. Итак, у второго есть символ \r (он отображается ручками). Должен ли я вставлять этот символ перед каждым \n?

P.P.P.S. Да, это сделал трюк: textarea.value.replace(/\n/gm, '\r\n');

+0

Заменить на '/ \ г \ п/G', так что вы не до конца с '\ г \ г \ n', если строка действительно имеет символ' \ r' –

ответ

1

Проблема заключалась в \r характера: Значение текстовое поле оказывает Рули был Some\ntext в то время как строка хранится в модели была Some\r\ntext). И это сделал трюк: textarea.value.replace(/\n/gm, '\r\n');

+0

Вместо замены линии заканчивается сам, я считаю полезным использовать https://github.com/ryanve/eol –

3

Моя первая мысль состоит в том, чтобы удалить все символы неба из обеих строк и сравнить их после.

str.replace(/[^a-zA-Z]/g, ""); 
+0

? Да, это работает! Но проблема в том, как заставить Backbone увидеть это равенство при установке атрибута: '' this.model.set ({attr: textareaValue}) '' '. Он использует метод Underscore, который просто сравнивает две строки в этом случае: '' 'return '' + a === '' + b;' '' –

+0

Какая строка имеет разрыв строки? –

+0

Я применил encodeURIComponent для обеих строк: результат «' 'Some% 0Atext vs Some% 0D% 0Atext'''. Итак, вы видите, что второй имеет/r character (он отображается Handlebars). –

Смежные вопросы