SyntaxError: invalid range in character class
function toggleEncoding(txt) { var eng = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"; var rus = "f,dult`;pbqrkvyjghcnea[wxio]sm'.z"; if(txt.search(/[а-яА-Я]/i) > -1) { for(i=0;i<eng.length;i++) { reg = new RegExp(eng[i], 'gi'); txt = txt.replace(reg, rus[i]); } } else { for(i=0;i<eng.length;i++) { reg = new RegExp(rus[i], 'gi'); txt = txt.replace(reg, eng[i]); } } alert(txt); } (function() { toggleEncoding('тест'); toggleEncoding('ntcn'); })(); что ему не нравится? с русским работает, а с англ - нет.. |
var reg = new RegExp('[', 'gi'); |
Цитата:
|
function toggleEncoding(txt) { var letters = "?,/.аfб,вdгuдlеtё`ж;зpиbйqкrлkмvнyоjпgрhсcтnуeфaх[цwчxшiщoъ]ыsьmэ'ю.яz" + "АFБ<ВDГUДLЕTЁ~Ж:ЗPИBЙQКRЛKМVНYОJПGРHСCТNУEФAХ{ЦWЧXШIЩOЪ}ЫSЬMЭ\"Ю>ЯZ"; return txt.replace(new RegExp('[' + letters.replace(/([\[\]\?])/g, '\\$1') + ']', 'gi'), function(letter) { var index = letters.indexOf(letter); if (index >= 0) { return letters[index & 1 ? index - 1 : index + 1]; } return letter; }); } (function() { alert(toggleEncoding('тест')); alert(toggleEncoding('ntcn')); alert(toggleEncoding('Ctujlyz vyt vfvf ghbujnjdbkf gbhj;rb? b jyb jxtym drecyst! Z b[ dct c]tk!)')); alert(toggleEncoding('Пшму фт учфьзду ща сщву ерфе нщг вщ тще цщкл щк шы тще фы ше ырщгдвю')); })(); |
У меня получилось так (наборы символов оставил из топика, можно расширять, добавить uppercase и др.):
function toggleEncoding(txt) { var rus = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"; var eng = "f,dult`;pbqrkvyjghcnea[wxio]sm'.z"; if(txt.search(/[а-яА-Я]/i) > -1) var from = rus, to = eng; else var from = eng, to = rus; txt = txt.split(''); for (var i = 0; i < txt.length; i++) { console.log(from.indexOf(txt[i])); txt[i] = to.charAt(from.indexOf(txt[i])) || txt[i]; } txt = txt.join(''); alert(txt); } toggleEncoding('тест'); toggleEncoding('ntcn'); |
ух ты
спасибо всем) |
:) :write: вариант без indexOf и RegExp ...
function toggleEncoding(b) { var c, e = {}, a = 0; for (c = "?,/.аfб,вdгuдlеtё`ж;зpиbйqкrлkмvнyоjпgрhсcтnуeфaх[цwчxшiщoъ]ыsьmэ'ю.яzАFБ<ВDГUДLЕTЁ~Ж:ЗPИBЙQКRЛKМVНYОJПGРHСCТNУEФAХ{ЦWЧXШIЩOЪ}ЫSЬMЭ\"Ю>ЯZ".split(""); a < c.length; a++) { var d = c[a], f = c[++a]; e[d] = f; e[f] = d } a = 0; b = b.split(""); for (c = b.length; a < c; a++)(d = e[b[a]]) && (b[a] = d); return b.join("") }; (function() { alert(toggleEncoding('тест')); alert(toggleEncoding('ntcn')); alert(toggleEncoding('Ctujlyz vyt vfvf ghbujnjdbkf gbhj;rb? b jyb jxtym drecyst! Z b[ dct c]tk!)')); alert(toggleEncoding('Пшму фт учфьзду ща сщву ерфе нщг вщ тще цщкл щк шы тще фы ше ырщгдвю')); })(); |
Цитата:
|
Часовой пояс GMT +3, время: 08:31. |