【问题标题】:CR, LF and CRLF characters in a String字符串中的 CR、LF 和 CRLF 字符
【发布时间】:2018-09-24 12:00:09
【问题描述】:

假设一个字符串在任何时候都只有 CR、LF 或 CRLF 作为换行符是否安全?

我想写一个逻辑,用 JavaScript 中的 CRLF 字符替换所有 LF 字符,但我有这个疑问。

我在想我可以找到所有的 LF (\n),检查它之前是否没有 CR(\r),然后将 \n 替换为 \r\n。

如果有人这样做过,请建议最好的方法是什么?

【问题讨论】:

  • 您在这里使用 Javascript 的环境是什么?仅用于“代码”,无需编写操作系统可读的文件,只需\n 就足够了,这将是Javascript引擎使用的新行的标准。
  • @Pac0 我想用文本区域中输入的 CRLF 替换任何 LF 字符。这是因为我对 textarea 的字符数有限制。存储来自该文本区域的值的系统会自动将 LF 替换为 CRLF。因此,如果用户正在使用 Mac 或复制粘贴在 Mac 上键入的字符串(意味着它只有 LF),前端将不会考虑 CR,该 CR 将在稍后添加到限制中,这会导致稍后出现问题保存在数据库中。

标签: javascript special-characters line-breaks


【解决方案1】:

AFAIK,\r 独立符号永远不会用于换行。它可以是\n\n\r。在这种情况下,您可以使用正则表达式 /\n\r?/g 来替换所有可能的换行符:

var someString = "kappa\npride\n\rgreyFace"
var lfcrRegexp = /\n\r?/g
var result = someString.replace(lfcrRegexp, "whatever") // => kappawhateverpridewhatevergreyFace

【讨论】:

  • \r 被旧版本的 MacOS 使用,但最近没有
  • @Pac0 那么,正则表达式将是/(\n|\r|\n\r)/g
  • \n\r 以上所有出现的顺序都不正确。对于 CRLF,顺序应该是\r\n,反之则不然。因为\r 是CR 而\n 是LF。
【解决方案2】:

使用可以使用replace方法,它会自动检查匹配字符串是否存在,然后用参数替换它。

   var data = "LFSingh";
   data = data.replace("LF","CRLF");
   console.log(data);

【讨论】:

    猜你喜欢
    • 2018-06-20
    • 2011-01-27
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2012-11-11
    • 2019-08-06
    相关资源
    最近更新 更多