2016-03-30 2 views
-1

У меня есть многострочное текстовое поле, в которое пользователь может войти, например. «märz märz». Теперь я хочу изменить оба слова в «März Mä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; 

результат: "МАРЗ МАРЗ"

Как сценарий должен быть изменен таким образом, результат: "März März" ?

Благодаря

+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

на основе намека Берги, в код должен быть изменен так:

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

Смежные вопросы