2016-04-19 17 views
0

Ich möchte nach dem Typ Titel des Beitrags automatisch Wert und erstellen Slug. Mein Code funktioniert gut mit englischen lateinischen Zeichen, aber Problem ist, wenn ich Zeichen "čćšđž" eintippe. Code ersetzt den ersten Typ dieser Zeichen in der Zeichenfolge, aber wenn das Zeichen wiederholt wird, ist das ein Problem. Zu Testzwecken wird dieser Titel "šžđčćžđš čćšđžčćšđž čćšđžčć ćčšđžšžčćššććšžčć" in diese Schnecke "szdcc" umgewandelt.Javascript ersetzen UTF Zeichen in Zeichenfolge

Das ist mein jQuery-Code:

$('input[name=title]').on('blur', function() { 
    var slugElement = $('input[name=slug]'); 

    if(slugElement.val()) { 
     return; 
    } 

    slugElement.val(this.value.toLowerCase().replace('ž', 'z').replace('č','c').replace('š', 's').replace('ć', 'c').replace('đ', 'd').replace(/[^a-z0-9-]+/g, '-').replace(/^-+|-+$/g, '')); 
}); 

Wie diese Probleme zu lösen? Ist es auch möglich, dass diese wenigen Zeichen die selbe replace() Funktion haben?

Antwort

1

replace() ersetzt nur das erste Vorkommen, es sei denn, Regex wird mit globalem Modifikator verwendet. Sie müssen sie alle in regulären Ausdruck ändern.

replace(/ž/g, "z") 

Soweit ich weiß, wird es in Ihrem Fall nicht möglich sein, eine einzige replace() zu verwenden. Wenn Sie daran interessiert sind, einen Stapel von .replace() miteinander zu verketten, sollten Sie besser einen benutzerdefinierten Code schreiben, um diese Zeichen zu ersetzen.

var newStr = ""; 
for (var i = 0; i < str.length; i++) { 
    var c = str.charAt(i); 
    switch (c) { 
    case "ž": newStr += "z"; break; 
    default: newStr += c; break; 
    } 
} 
+0

Dank für die schnelle Antwort. Ich werde das versuchen und Ihnen bald antworten. Ist es möglich, diese fünf Zeichen ** čćšđž ** in einen replace() regulären Ausdruck zu setzen? –

+1

bearbeitete Antwort. Das glaube ich nicht. – Kenji

2

Versuchen Sie folgendes:

function clearText(inp) { 
     var wrong = 'čćšđž'; 
     var right = 'ccsdz'; 
     var re = new RegExp('[' + wrong + ']', 'ig'); 
     return inp.replace(re, function (m) { return right.charAt(wrong.indexOf(m)); }); 
    } 
Verwandte Themen