【问题标题】:How to create a human readable normalized string?如何创建人类可读的规范化字符串?
【发布时间】:2012-06-18 18:09:35
【问题描述】:

我需要替换像

这样的特殊字符
  • ü -> ue
  • ä -> ae
  • é -> e

在一个字符串中。最好的方法是什么?

【问题讨论】:

  • 您应该修复您的后端代码,以便它可以处理特殊字符。
  • 如果您不知何故无法遵循 SLaks 的优秀建议,您必须首先明确什么是您的“特殊”(或“正常”)字符以及您想用什么替换它们。跨度>
  • 我们的大部分应用程序都在客户端...与服务器对话以获取规范化字符串需要很长时间并且是矫枉过正不是吗?
  • 请更改问题以包含“人类可读”要求,并详细说明。

标签: javascript coffeescript normalize


【解决方案1】:

考虑encodeURIComponent(以及相关的解码)。

该 w3schools 页面上给出的示例:

var uri="http://w3schools.com/my test.asp?name=ståle&car=saab";

document.write(encodeURIComponent(uri));

输出:

http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dst%C3%A5le%26car%3Dsaab

注意中间的å变成%C3%A5

如果您不介意 * @ - _ + . / 不被编码,还有 escape()(和 unescape())。

根据“人类可读”要求进行编辑:

请注意,通过“oe”类型替换可能会出现所有字符,并且不要尝试将这些“可读”字符串转换回其原始形式,否则会破坏转换中的内容.这就是 escape 和 unescape 方法的重点。

考虑在您自己的转换之后应用转义/取消转义以捕获任何剩余的意外字符。

【讨论】:

  • 我想过,但我们需要一些人类可读的东西......也许我应该调用函数 humanNurmalize :)
【解决方案2】:

谷歌搜索后,我找不到任何合适的东西。所以我最终写了自己的。

normalize = (s) ->

  mapping = 
    'ä': 'ae'
    'ö': 'oe'
    'ü': 'ue'
    '&': 'and'
    'é': 'e'
    'ë': 'e'
    'ï': 'i'
    'è': 'e'
    'à': 'a'
    'ù': 'u'
    'ç': 'c'
    "'": ''
    '´': ''

  r = new RegExp(Object.keys(mapping).join('|'), 'g')
  s.replace(r, (s)->
    mapping[s]
  )

【讨论】:

  • JS 中的逐字符循环非常慢。更好的解决方案是自动构建覆盖映射中所有键的正则表达式,并使用函数作为 String.replace 的参数替换为值。
  • 是的。好在你只需要初始化 r 一次!
  • 这是您要替换的所有字符的完整列表吗?
  • 这不会替换大写字符 .. 像 Ü Ä Ö
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 2018-04-16
  • 2018-09-29
  • 2020-02-12
  • 2012-04-25
  • 2014-03-07
相关资源
最近更新 更多