2016-03-30 72 views
-1

我有一個多行文本框,用戶可以輸入例如「märzmärz」。 現在我想把這兩個詞改成「MärzMärz」。如何更正大寫包含ä,ö,ü的單詞?

我想這代碼(自定義按鍵腳本):

var z=event.value.replace(/[\w\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u00ff]+/igm, function(m){ return m.toLowerCase();}); 
var x=z.toLowerCase(); 
var y = x.replace(/\b./igm, function(m){ return m.toUpperCase();}); 
event.value = y; 

的結果是:「馬茲馬茲」

腳本必須如何編輯這樣的結果是:「馬茲馬茲」 ?

感謝

+0

什麼是你的詞?任何可以用空格分開的東西? – Bergi

+0

@Bergi是的,這就對了。但它認爲我必須編輯我的問題,因爲我的文本字段是多行。 – aklose

+0

那你爲什麼不簡單地匹配'/(^ | \ s +)\ S/g'和'.toUpperCase()'那? – Bergi

回答

0

在這裏你去不需要使用正則表達式,如果它總是第一個字母:

var start = "märz märz"; 

var text = start.split(' ').map(function(el) { 
    return el.slice(0, 1).toUpperCase() + el.slice(1); 
}).join(' '); 


console.log(text); // "März März" 

JSBin:

https://jsbin.com/sohamo/edit?js,console

+0

需要正則表達式,如果它不總是隻有空格:-) – Bergi

0

這個怎麼樣:

var a = "märz märz, april mai oktober\nnovember februar\naugust"; 
 

 
function capitalize(string) { 
 
    var b = string.split(" "); 
 
    b.forEach(function(e, i, a) { 
 
    a[i] = e[0].toUpperCase() + e.slice(1); 
 
    if (a[i].indexOf("\n") > 0) { 
 
     a[i] = e[a[i].indexOf("\n") + 1].toUpperCase() + a[i].slice(a[i].indexOf("\n") + 2); 
 
    } 
 
    }); 
 
    return b.join(" "); 
 
} 
 

 
document.write(capitalize(a));

+0

嗨,幾乎是正確的,因爲新行的第一個單詞沒有改變,並保持小寫。如果能解決這將是很好的。 – aklose

+0

好吧,我已經更新了該功能。新的線路現在也被認可。 – John

0

基於BERGI的提示,代碼必須被編輯到這一點:

event.value = event.value.replace(/(^|\s+)\S/g, function(m){ return m.toUpperCase();}); 

該代碼正是我想要做什麼。

每一行中的每個單詞都是大寫字母。

謝謝。

+0

更加緊湊的箭頭功能: 'event.value = event.value.replace(/(^ | \ s +)\ S/g,m => m.toUpperCase())' – John

相關問題