2016-04-19 46 views
0

投稿したい投稿のタイトルは自動的に価値があり、スラッグを作成します。私のコードは英語のラテン文字でうまく動作しますが、問題は文字 'čćšđž'をタイプするときです。コードはこの文字の最初の型を文字列に置き換えますが、文字が問題よりも繰り返されている場合は置き換えます。だから、テスト目的のために、このタイトル 'šžđčćžđščćšžžčćšžčćšžžčććčšđžžžćććčšđžčžććčšđžžččščćčšžčć'は、このスラッグ 'szdcc'に変換されます。Javascript文字列内のutf文字を置き換えます

これは私のjqueryのコードです:

$('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, '')); 
}); 

この問題を解決する方法は?同じreplace()関数に入れられたこの少数の文字にも可能ですか?

答えて

1

replace()は、regexがグローバル修飾子とともに使用されていない限り、最初のオカレンスを置き換えます。それらをすべて正規表現に変更する必要があります。

replace(/ž/g, "z") 

私が知る限り、あなたのケースでは1つのreplace()を使用することはできません。 複数の.replace()を連鎖させることに懸念がある場合は、これらの文字を置き換えるカスタムコードを書く方がよい場合があります。

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

感謝を。私はこれを試して、すぐにあなたに返信します。これは5つの文字に可能です**čćšđž** replace()正規表現に入れますか? –

+1

編集された回答。私はそう信じていない。 – Kenji

2

これを試してみてください:迅速な答えを

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)); }); 
    } 
関連する問題