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, время: 14:58. |