JavaScript 中的土耳其语大小写转换

Posted

技术标签:

【中文标题】JavaScript 中的土耳其语大小写转换【英文标题】:Turkish case conversion in JavaScript 【发布时间】:2010-12-23 10:36:31 【问题描述】:

我想在我想要的语言环境中将字符串转换为 javascript 中的小写或大写。我认为像toUpperCase()toLocaleUpperCase() 这样的标准函数不能满足这种需求。 toLocale 函数的行为不正常。

例如,在我的系统上的 Safari 4、Chrome 4 Beta、Firefox 3.5.x 中,它会错误地转换带有土耳其字符的字符串。浏览器对 navigator.language 的响应分别为"en-US""tr""en-US"。但据我所知,无法在浏览器中获取用户的Accept-Lang 设置。只有 Chrome 给了我"tr",尽管我已经配置了每个浏览器的首选土耳其语言环境。我认为这些设置只会影响 HTTP 标头,但我们无法通过 JavaScript 访问这些设置。

在Mozilla documentation 它说

字符串中的字符在遵守当前语言环境的情况下转换为 ...。对于大多数语言,这将返回与 ...

我认为它对土耳其语有效,它配置为 en 或 tr 并没有什么不同。在土耳其语中,它应该将 "DİNÇ" 转换为 "dinç" 并将 "DINÇ" 转换为 "dınç",反之亦然。

是否有任何 JavaScript 库可以满足这种需求?我认为它不仅应该在用户的语言环境中正确转换,而且还应该支持通过语言环境参数进行转换。因为开发人员无法访问用户配置的首选语言。

【问题讨论】:

您可能有兴趣关注潜在的新 SE 站点的提议,包括 Turkish Language & Usage 和 *** in Turkish。 【参考方案1】:

几年后回到今年,提供更多最新的解决方案。

下面不需要破解,

只需使用 String.toLocaleUpperCase() 和 String.toLocaleLowerCase()

"dinç".toLocaleUpperCase('tr-TR') // "DİNÇ"

所有现代浏览器现在都支持这个。


[旧的,不要使用这个]

试试这些功能

String.prototype.turkishToUpper = function()
    var string = this;
    var letters =  "i": "İ", "ş": "Ş", "ğ": "Ğ", "ü": "Ü", "ö": "Ö", "ç": "Ç", "ı": "I" ;
    string = string.replace(/(([iışğüçö]))+/g, function(letter) return letters[letter]; )
    return string.toUpperCase();


String.prototype.turkishToLower = function()
    var string = this;
    var letters =  "İ": "i", "I": "ı", "Ş": "ş", "Ğ": "ğ", "Ü": "ü", "Ö": "ö", "Ç": "ç" ;
    string = string.replace(/(([İIŞĞÜÇÖ]))+/g, function(letter) return letters[letter]; )
    return string.toLowerCase();


// Example
"DİNÇ".turkishToLower(); // => dinç
"DINÇ".turkishToLower(); // => dınç

我希望它们对你有用。

【讨论】:

+1 效果很好,我用我的萤火虫测试过,有趣的问题,不错的方法。 我在我的项目中使用过类似的东西: turkishToUpper = function(str) return str.replace('i','İ').replace('ı','I ').toUpperCase(); 因为只有 'i' 和 'I' 字符是问题所在。但是我不知道其他语言的其他问题,您可能想在特定语言中进行大小写转换。所以应该有一个接受语言环境参数的库,但我找不到。感谢您的回答,它也解决了土耳其语的问题。 我认为第二个答案更好> ***.com/a/5991351/11374。因为如果两个或多个字符彼此相邻,这不会降低 toTurkishUpper 和 toTurkishLower 更容易理解。 为什么在正则表达式中有双括号?【参考方案2】:

感谢您的功能。我真的很喜欢它。连续的土耳其字符输入结果“未定义”为“ÇÇ”。尝试将 '/+g' 替换为 '/g'。功能是:

String.prototype.turkishToUpper = function()
var string = this;
var letters =  "i": "İ", "ş": "Ş", "ğ": "Ğ", "ü": "Ü", "ö": "Ö", "ç": "Ç", "ı": "I" ;
string = string.replace(/(([iışğüçö]))/g, function(letter) return letters[letter]; )
return string.toUpperCase();


String.prototype.turkishToLower = function()
var string = this;
var letters =  "İ": "i", "I": "ı", "Ş": "ş", "Ğ": "ğ", "Ü": "ü", "Ö": "ö", "Ç": "ç" ;
string = string.replace(/(([İIŞĞÜÇÖ]))/g, function(letter) return letters[letter]; )
return string.toLowerCase();

【讨论】:

@scokmen gotcha【参考方案3】:
String.prototype.tUpper = function()
   return this.replace(/i/g,"İ").toLocaleUpperCase();


String.prototype.tLower = function()
    return this.replace(/I/g,"ı").toLocaleLowerCase();

【讨论】:

请注意本网站使用的语言是英文。【参考方案4】:
    var  a="lişliş lğüğpğp İŞİŞİŞ lşi ĞĞHFGH ÜGFHFHG ühüüüğ üğüğş ş ş Ş  İ i  ılk Ilk";

var s=a.split(' ');

var netice="";

s.forEach(function(g) 
  if (g.length>1)
    netice+=g[0].toLocaleUpperCase('tr')+
      g.slice(1).toLocaleLowerCase('tr')+" "; 
  else
    netice+=g.toLocaleUpperCase('tr')+" ";
);

alert(netice); 

【讨论】:

【参考方案5】:

请查看这段可以转换为大写和小写的小代码

var manualLowercase = function(s) 
  return isString(s)
      ? s.replace(/[A-Z]/g, function(ch) return String.fromCharCode(ch.charCodeAt(0) | 32);)
      : s;
;

var manualUppercase = function(s) 
  return isString(s)
      ? s.replace(/[a-z]/g, function(ch) return String.fromCharCode(ch.charCodeAt(0) & ~32);)
      : s;
;

【讨论】:

该答案对于所述问题是错误的,因为它不涉及iışğüçö,这正是问题所在。你应该删除这个答案。

以上是关于JavaScript 中的土耳其语大小写转换的主要内容,如果未能解决你的问题,请参考以下文章

javascript 土耳其char转换

JavaScript中字符操作之大小写转换

JavaScript中怎样将字符串中的大写转换成小写同时将小写转换成大写

如何在 java 中将“i”与土耳其语 i 匹配?

javascript 将字符串“hAPPY,i'm a student,NOW”中的大写字母转换成小写字母,小写字母转换成大写字母。

“js”怎么转换大小写?