在 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)的主要内容,如果未能解决你的问题,请参考以下文章

正确显示textarea中输入的回车和空格

格式化填充的文本区域、回车符、换行符和 HAML

a-textarea的不满一行就换行问题

如何替换SQL字段中的换行符,回车符

将换行符/回车符发布为隐藏字段值

在sql server 数据库字段中如何加入回车符和换行符?