【问题标题】:toLowerCase wrong lower characters " İ "toLowerCase 错误的小写字符“İ”
【发布时间】:2018-05-21 15:11:01
【问题描述】:

我实际上有一个简单的问题。当您检查以下代码时,您就会明白我的意思。

function isPalindrome(string){
  string = string.toLowerCase();
  var charArr = string.split('');

  charArr.forEach( char => {
    console.log(char);
  })
  console.log(charArr.length)
}

isPalindrome("İris");

输出

i
 ̇  <- what is this ?
r
i
s
5 

如您所见,添加额外的字符。我无法解决这个问题。有没有办法解决这个问题?

【问题讨论】:

  • 你试过toLocaleLowerCase()吗?
  • @FedericoklezCulloca 哇它的工作。 toLowerCase 有什么区别?
  • "İ" 由两个 Unicode 字符组成,即 I 字符和它上面的点。 .toLocaleLowerCase() 将其识别为单个字母。
  • @JJJ 我认为.toLowerCase() 将它变成了拉丁文小写“i”加上Unicode“组合点上面”字符(十进制775)。
  • 它不适用于 chrome 控制台。我认为这不应该工作,因为那个角色不是英语。怎么能和英文小写一样。

标签: javascript utf-8 lowercase


【解决方案1】:

这是有效的。 使用toLowerCase 后,您必须删除可能的特殊字符。你可以使用replace(/[^\w\s]/gi, '')

Fiddle

function isPalindrome(str){
  var charArr = str.toLowerCase().replace(/[^\w\s]/gi, '').split(""); //toLowerCase --> remove special characters --> split the string

  charArr.forEach( char => {
    console.log(char);
  })
  console.log(charArr.length)
}

isPalindrome("İris");

【讨论】:

  • 更简单的方法是使用LocaleLowerCase ()
  • 这是更可靠的答案。
  • toLocaleLowerCase 并非适用于所有浏览器。在我的 chrome 62.0.3202(德语)中它不起作用。
  • "string".toLocaleLowerCase()..replace(/[^\w\s]/gi, '') 是最安全的解决方案。
猜你喜欢
  • 2018-03-27
  • 1970-01-01
  • 2014-06-24
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多