Ser*_*soy 4 javascript title-case unicode turkish pascalcasing
我有一个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();});
};
Run Code Online (Sandbox Code Playgroud)
但这并没有给我正确的结果,我怀疑正则表达式替换不能在unicode上使用,但ascii.
当我用土耳其字符测试时,我得到错误的结果.
此外,如果这可以得到解决,我需要锦上添花,不仅要用空格分隔单词,还要用其他一些停止字符分隔: - =/etc这样
我在这里读过许多类似的问题,但到目前为止还没有运气.
谢谢
注意:我认为这称为Title Case,但有些人认为它是Pascal Case.坦率地说,我有兴趣解决unicode问题(我认为是根本原因)而不是语义,所以如果我使用了错误的术语,请原谅我:)
独立功能:
function toProperCase(s){
return s.replace(/([^\s:\-])([^\s:\-]*)/g,function($0,$1,$2){
return $1.toUpperCase()+$2.toLowerCase();
});
}
Run Code Online (Sandbox Code Playgroud)
或者扩展String.prototype:
String.prototype.toProperCase=function() {
return this.replace(/([^\s:\-])([^\s:\-]*)/g,function($0,$1,$2){
return $1.toUpperCase()+$2.toLowerCase();
});
}
"çoban ?rmak becomes çOban ?Rmak intead of Çoban Irmak Hello-wOrld".toProperCase();
// "Çoban Irmak Becomes Çoban Irmak Intead Of Çoban Irmak Hello-World"
Run Code Online (Sandbox Code Playgroud)
更新:
下一代码使用自定义功能转换特定于语言环境的字符(部分测试).代码将函数添加到String.prototype:toLocaleProperCase2,toLocaleLowerCase2和toLocaleUpperCase2.
(function(){
// locale specific chars
// IMPORTANT: name of locale must be always in lower case (for "tr-TR" locale - "tr-tr") !!!
var localeInfos={
"tr-tr": { lower: { i:"?", ?:"I", ?:"?", ?:"?", ü:"Ü", ç:"Ç", ö:"Ö" },
upper: { ?:"i", I:"?", ?:"?", ?:"?", Ü:"ü", Ç:"ç", Ö:"ö" } }
},
localeInfo;
// helper vars
var mask="\\s:\\-", // add additional delimeters chars to the mask if needed
rg=new RegExp("([^"+mask+"])([^"+mask+"]*)","g");
var fnToLocaleLower=function(s){ return localeInfo.upper[s]; },
fnToLocaleUpper=function(s){ return localeInfo.lower[s]; },
fnToProper=function($0,$1,$2){
if(localeInfo){
if(localeInfo.lower.hasOwnProperty($1))$1=localeInfo.lower[$1];
$2=$2.replace(localeInfo.upperSearchRegExp,fnToLocaleLower);
}
return $1.toUpperCase()+$2.toLowerCase();
};
// helper calculations
var localeInfosKeys=Object.keys(localeInfos);
for(var i=0;localeInfo=localeInfos[localeInfosKeys[i]];i++){
localeInfo.lowerSearchRegExp=new RegExp("["+Object.keys(localeInfo.lower).join("")+"]","g");
localeInfo.upperSearchRegExp=new RegExp("["+Object.keys(localeInfo.upper).join("")+"]","g");
}
// extending String.prototype
String.prototype.toLocaleProperCase2=function toLocaleProperCase2(locale){
localeInfo=localeInfos[arguments.length?locale.toLowerCase():null];
return this.replace(rg,fnToProper);
};
String.prototype.toLocaleLowerCase2=function toLocaleLowerCase2(locale){
return ((localeInfo=localeInfos[arguments.length?locale.toLowerCase():null]) ?
this.replace(localeInfo.upperSearchRegExp,fnToLocaleLower):
this).toLowerCase();
};
String.prototype.toLocaleUpperCase2=function toLocaleUpperCase2(locale){
return ((localeInfo=localeInfos[arguments.length?locale.toLowerCase():null]) ?
this.replace(localeInfo.lowerSearchRegExp,fnToLocaleUpper) :
this).toUpperCase();
};
})();
Run Code Online (Sandbox Code Playgroud)
// testing
var sss="çoban ?rmak ibec?oimes çOban ?Rmak intead of Çoban IrIma?k Hello-wOrld";
console.log("Origin: ", sss);
console.log("Proper TR: ", sss.toLocaleProperCase2("tr-TR"));
console.log("Proper: ", sss.toLocaleProperCase2());
console.log("Lower TR: ", sss.toLocaleLowerCase2("tr-TR"));
console.log("Lower: ", sss.toLocaleLowerCase2());
console.log("Upper TR: ", sss.toLocaleUpperCase2("tr-TR"));
console.log("Upper: ", sss.toLocaleUpperCase2());
// Origin: çoban ?rmak ibec?oimes çOban ?Rmak intead of Çoban IrIma?k Hello-wOrld
// Proper TR: Çoban Irmak ?bec?oimes Çoban Irmak ?ntead Of Çoban Ir?maik Hello-World
// Proper: Çoban Irmak Ibec?oimes Çoban Irmak Intead Of Çoban Irimaik Hello-World
// Lower TR: çoban ?rmak ibec?oimes çoban ?rmak intead of çoban ?r?maik hello-world
// Lower: çoban ?rmak ibec?oimes çoban ?rmak intead of çoban irimaik hello-world
// Upper TR: ÇOBAN IRMAK ?BECIO?MES ÇOBAN IRMAK ?NTEAD OF ÇOBAN IRIMA?K HELLO-WORLD
// Upper: ÇOBAN IRMAK IBECIOIMES ÇOBAN IRMAK INTEAD OF ÇOBAN IRIMA?K HELLO-WORLD
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1984 次 |
| 最近记录: |