【问题标题】:Preserving carriage-returns (Hex 0D) in textarea fields在 textarea 字段中保留回车符 (Hex 0D)
【发布时间】: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 规范的链接。

标签: javascript html


【解决方案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,以区分这两种情况。
猜你喜欢
  • 2023-03-18
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多