在 textarea 字段中保留回车符 (Hex 0D)
Posted
技术标签:
【中文标题】在 textarea 字段中保留回车符 (Hex 0D)【英文标题】:Preserving carriage-returns (Hex 0D) in textarea fields 【发布时间】:2015-11-22 03:28:08 【问题描述】:我正在编写一个 javascript 应用程序,它将检查用户输入的回车符 (Hex 0D) 和换行符 (Hex 0A),但是,如果将文本粘贴到 Web 表单 textarea 字段中,回车符就会消失,只留下换行符作为换行符。我需要识别回车以正确处理数据。
这是一个最小的例子:
function checkForCR()
if (/\r/.test(document.crform.sandbox.value))
alert('Carriage Returns found.');
else
alert('Carriage Returns NOT found.');
return false;
<form name='crform' onsubmit="return checkForCR();">
<textarea name="sandbox" cols="50" rows="5"></textarea>
<br />
<input type="submit" value="Check for Carriage Returns">
</form>
如果我将一些包含回车的文本粘贴到该字段中,无论我粘贴什么,我都无法获得对 \r
的肯定测试。
这是浏览器中文本区域字段的正常行为吗?有什么方法可以保留回车符以及网络表单输入中的换行符?
【问题讨论】:
请注意,自动换行不会创建换行符。此外,大多数浏览器使用\n
作为换行符,这似乎是work fine。
你在不同的浏览器上检查过这个吗?我相信标准是文本区域中的换行符应表示为 \n\r,但并非所有浏览器都尊重这一点。
我已经在 Chrome(版本 44.0.2403.155)和 Windows 上的 Internet Explorer(版本 9.08.112)上进行了检查。我也在 Linux 上尝试过 Chrome(版本 44.0.2403),但我得到了相同的结果。
我正在从具有 DOS 格式换行符的文件中复制和粘贴,并已使用二进制编辑器检查文本中是否存在 \r
字符,但web-form 无法看到这些字符。
This answer 包含管理用户输入中换行符处理规则的精彩摘要,以及指向 W3 规范的链接。
【参考方案1】:
尝试改用这个表达式:
/[\n\r]/g
if (/[\n\r]/g.test(document.crform.sandbox.value))
新行由\n
(换行符)和\r
(回车符)组成。
【讨论】:
这给了我一个肯定的结果,但这只是因为字符类[\n\r]
包括换行符和回车符,并且换行符在文本中没有改变。但是,我需要能够在同一段文本中区分\r\n
和\n
。所以我需要在字段中保留\r
字符。
数据/文本来自哪里?后端?
一个地方是 Excel,例如。用户从电子表格中复制了几个单元格,行尾的行尾是\r\n
,但单元格内的任何嵌入换行符都是\n
。所以我需要在粘贴后保留\r
,以区分这两种情况。以上是关于在 textarea 字段中保留回车符 (Hex 0D)的主要内容,如果未能解决你的问题,请参考以下文章