【发布时间】:2012-08-13 11:40:08
【问题描述】:
我有一个由于非英文字母而无法解决的 javascript 大小写转换问题。我主要关心的是土耳其字母表。
我需要做的是:
- 你好世界=>你好世界
- 你好世界=>你好世界
- 你好世界=>你好世界
这是我迄今为止所取得的成就:
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
我已经阅读了许多关于 SO 的类似问题,但到目前为止还没有运气。
谢谢
注意:我认为这称为 Title Case,但有些人认为这是 Pascal Case。坦率地说,我有兴趣解决 unicode 问题(我认为这是根本原因)而不是语义,所以如果我使用了错误的术语,请原谅我 :)
【问题讨论】:
-
为什么不使用 CSS 呢? jsfiddle.net/3jg3b - text-transform: capitalize
-
您的正则表达式选择器问题。 \S 表示不是空格字符,而是 javascript 将 ş,ç 标识为空格。看看blog.stevenlevithan.com/archives/javascript-regex-and-unicode
-
我不使用 CSS @Andreas,因为这是为了纠正用户输入的格式错误。
-
是的@hkutluay 我知道这一事实,因此有关该主题的 unicode 提示 ;)
-
它必须只适用于土耳其语,还是也适用于其他语言?
标签: javascript unicode turkish pascalcasing title-case