我想在我想要的语言环境中将字符串转换为JavaScript中的大小写。我认为像toUpperCase()
和toLocaleUpperCase()
这样的标准函数不能满足这种需求。 toLocale
函数的行为不正常。
例如,在我的系统上的Safari 4,Chrome 4 Beta,Firefox 3.5.x中,它会错误地转换包含土耳其语字符的字符串。浏览器分别以"en-US"
,"tr"
,"en-US"
的形式回复navigator.language。但是我无法在浏览器中找到用户的Accept-Lang
设置。只有Chrome为我提供了"tr"
,尽管我已将所有浏览器土耳其语区域设置为首选。我认为这些设置仅影响HTTP标头,但我们无法通过JavaScript访问这些设置。
字符串中的字符将转换为...,同时尊重当前区域设置。对于大多数语言,这将返回与...相同的
我认为它对土耳其语有效,它没有区别它被配置为en或tr。在土耳其语中,它应将"DİNÇ"
转换为"dinç"
,将"DINÇ"
转换为"dınç"
,反之亦然。
是否有满足此需求的JavaScript库?我认为它不仅应该在用户的语言环境中正确转换,而且还应该支持通过locale参数进行转换。因为开发人员无法访问用户配置的首选语言。
答案 0 :(得分:53)
回到这些年后,提供更多最新的解决方案。
下面没有必要进行黑客攻击,
只是使用 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 :(得分:24)
感谢您的功能。我真的很喜欢它。连续的土耳其字符输入结果'undefined'为'ÇÇ'。尝试用'/ 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();
}
答案 2 :(得分:3)
String.prototype.tUpper = function(){
return this.replace(/i/g,"İ").toLocaleUpperCase();
}
String.prototype.tLower = function(){
return this.replace(/I/g,"ı").toLocaleLowerCase();
}
答案 3 :(得分:0)
请查看可以转换为upppercase和小写
的这小段代码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;
};
答案 4 :(得分:0)
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);