JS 比较字符串与换行符
JS comparing strings with line breaks
我正在尝试比较两个相等的字符串:一个 textarea
值(或 textContent
,或 innerHTML
)和一个作为属性存储在 Backbone 中的字符串模型,例如"A string↵with line break"
。
而这个比较总是 returns false
.
比较这些字符串的长度可以看出差异(存储的字符串长一个符号)。
问题是如何准备第一个字符串(从textarea
中提取)使其完全等于第二个字符串(存储在模型中)。
P.S。他们都是typeof === 'string'
.
P.P.S。
主要问题是如何在设置属性时让 Backbone 看到相等性:
this.model.set({ attr: textareaValue })
。
Backbone 在这种情况下使用 Underscore 的方法简单地比较两个字符串:
return '' + a === '' + b;
我在两个字符串上都应用了 encodeURIComponent
:结果是 Some%0Atext
与 Some%0D%0Atext
。所以第二个有 \r
字符(由 Handlebars 渲染)。我应该在每个 \n
之前插入这个字符吗?
P.P.P.S。是的,这成功了:textarea.value.replace(/\n/gm, '\r\n');
我的第一个想法是从两个字符串中删除所有非字母字符,然后再进行比较。
str.replace(/[^a-zA-Z]/g, "");
问题出在 \r
个字符中:Handlebars 呈现的文本区域值是 Some\ntext
,而存储在模型中的字符串是 Some\r\ntext
)。
这成功了:textarea.value.replace(/\n/gm, '\r\n');
我正在尝试比较两个相等的字符串:一个 textarea
值(或 textContent
,或 innerHTML
)和一个作为属性存储在 Backbone 中的字符串模型,例如"A string↵with line break"
。
而这个比较总是 returns false
.
比较这些字符串的长度可以看出差异(存储的字符串长一个符号)。
问题是如何准备第一个字符串(从textarea
中提取)使其完全等于第二个字符串(存储在模型中)。
P.S。他们都是typeof === 'string'
.
P.P.S。 主要问题是如何在设置属性时让 Backbone 看到相等性:
this.model.set({ attr: textareaValue })
。
Backbone 在这种情况下使用 Underscore 的方法简单地比较两个字符串:
return '' + a === '' + b;
我在两个字符串上都应用了 encodeURIComponent
:结果是 Some%0Atext
与 Some%0D%0Atext
。所以第二个有 \r
字符(由 Handlebars 渲染)。我应该在每个 \n
之前插入这个字符吗?
P.P.P.S。是的,这成功了:textarea.value.replace(/\n/gm, '\r\n');
我的第一个想法是从两个字符串中删除所有非字母字符,然后再进行比较。
str.replace(/[^a-zA-Z]/g, "");
问题出在 \r
个字符中:Handlebars 呈现的文本区域值是 Some\ntext
,而存储在模型中的字符串是 Some\r\ntext
)。
这成功了:textarea.value.replace(/\n/gm, '\r\n');