【问题标题】:Filter non-Alpha characters for multiple languages过滤多种语言的非字母字符
【发布时间】:2013-08-09 09:04:10
【问题描述】:

我想写一个正则表达式来删除所有非字母字符,如下:

björn -> björn
Barry's -> barrys
Who? -> who
Cibé? -> cibé
I'd -> id
ice-cream -> icecream
No!!! -> no
[{brackets}] -> brackets
~inv3rse -> invrse

并将所有字符转换为其小写版本。如何为所有语言或至少使用拉丁文字的欧洲语言执行此操作?

【问题讨论】:

  • 我假设第四个例子不应该有问号,但重音应该在那里吗?
  • @Michelle 应该有口音,但不是问号,谢谢!
  • This question 可以帮助您匹配重音字符 - 尝试将 \u00C0-\u017F 添加到您的字符类中(但是,我尚未验证包含哪些字符)。

标签: javascript


【解决方案1】:
str.toLowerCase().replace(/[^a-z]/gi,'');

这会将所有内容转换为小写,然后将所有不是字母字符 (a-z) 的内容替换为空字符串,实质上是删除它们。为了保留某些其他字符(例如带有重音符号的 e),只需将该符号添加到正则表达式。

【讨论】:

  • 但这会转换为“Cibé”?改为“cib”而不是“cibé”。
  • @Baz 编辑正则表达式以包含您想要的任何其他字符的 unicode。
  • @gr3co 但是这些符号太多了。仅冰岛语、丹麦语、挪威语、爱尔兰语和苏格兰语包含:ýþæöøåäáéíóúàèìòù
  • 手动枚举所有重音字符很麻烦,容易出错,并且每次 Unicode 标准添加新的重音字符时都需要修改。它也不包括组合字符。 (例如,将 ACUTE ACCENT ABOVE + 大写拉丁 E)。它会丢弃组合字符,但保留 E。另一方面,如果它与非字母组合,则需要删除它。
  • 我不确定\w 是否涵盖这些外来字符,但您可以尝试一下并告诉我它是否有效:str.toLowerCase().replace(/[^\w]/gi, '')。基本上,\w 涵盖了所有“单词字符”(数字、数字)。
猜你喜欢
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 2011-07-15
  • 2013-12-30
  • 2013-06-14
  • 2013-01-19
  • 1970-01-01
相关资源
最近更新 更多