我有一个JavaScript大小写转换问题,由于涉及到非英文字母,我无法解决。我的主要问题是土耳其字母表。
我需要做的是:
- hello world => Hello World
- HELLO WORLD => Hello World
- hELLO wOrLd => Hello World
这是我目前已经完成的内容:
String.prototype.turkishToUpper = function(){
var stringlow = this;
var letterslow = { 'i': 'İ', 'ş': 'Ş', 'ğ': 'Ğ', 'ü': 'Ü', 'ö': 'Ö', 'ç': 'Ç', 'ı': 'I' };
stringlow = stringlow.replace(/(([iışğüçö]))/g, function(letterlow){ return letterslow[letterlow]; })
return stringlow.toUpperCase();
}
String.prototype.turkishToLower = function(){
var stringup = this;
var lettersup = { 'İ': 'i', 'I': 'ı', 'Ş': 'ş', 'Ğ': 'ğ', 'Ü': 'ü', 'Ö': 'ö', 'Ç': 'ç' };
stringup = stringup.replace(/(([İIŞĞÜÇÖ]))/g, function(letterup){ return lettersup[letterup]; })
return stringup.toLowerCase();
}
String.prototype.toProperCase = function () {
return this.replace(/\w\S*/g, function(txt){return txt.charAt(0).turkishToUpper() + txt.substr(1).turkishToLower();});
};
但这并没有给我正确的结果,我怀疑正则表达式替换不能在Unicode上使用,只能在ASCII上使用。
当我测试土耳其字符时,得到了错误的结果。
- şeker 变成了 şEker 而不是 Şeker - çoban ırmak 变成了 çOban ıRmak 而不是 Çoban Irmak
此外,如果这个问题可以解决,我需要一个锦上添花的功能,不仅可以通过空格分隔单词,还可以通过其他停止字符(如:- = /等)分隔单词。
- hello-world 变成 Hello-World - hello:world 变成 Hello:World
我已经阅读了许多类似的问题,但迄今为止没有运气。
谢谢!
注:我认为这被称为标题大小写,但有些人认为它是帕斯卡尔大小写。坦白说,我对解决Unicode问题(我相信这是根本原因)更感兴趣,而不是语义,所以如果我使用了错误的术语,请原谅我 :)