Автор Тема: Add slashes (reg_egp)  (Прочитано 2697 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Viktor Kudlak

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 2
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.meganet.org.ru
Add slashes (reg_egp)
« : 02 Января 2005, 08:49:07 »
Пишу клас для сериализации данных, но застопорился на написании функции добавления слешей (к примеру замена " на \\" и т.д.)
Пробовал писать по разному, но постоянно возникают подводные камни. Кто уже писал подобные рег. экспы, подскажите пожалуйста. Далее эти строки нужно будет использовать в объекте подобном этому:
var obj = {0:"Привет Мир!\\nPS. Витек!!!"};

Писал так, но есть проблемы с тем, что \\\\$1 распознается именно как \\$1, если поставить пробел перед $1, то все нормально, но что мне делать с этими пробелами :(, если только заменять последовательность "\\\\\\s" на "\\\\", но опять же это не правильно, т.к. всякое может быть:

function addslashes (str) {
var reg1 = /(["\']{1})/g;
var reg2 = /[\\r]{1}/g;
var reg3 = /[\\n]{1}/g;
str = str.replace(reg1, "\\\\$1");
str = str.replace(reg2, "\\\\r");
str = str.replace(reg3, "\\\\\\n");
return str;
 }


пробовал даже так, но возникают проблемы с русскими символами:

function addslashes (str) {
var re = /%/g;
str = escape(str);
str = str.replace(re, \'\\\\x\');
return str;
 }

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Add slashes (reg_egp)
« Ответ #1 : 02 Января 2005, 15:25:14 »
Цитировать
Viktor Kudlak:
 Писал так, но есть проблемы с тем, что \\\\$1 распознается именно как \\$1,

это как еще ?
вызываю alert(addslashes(\'"test"\')) мне выводит \\"test\\"
Смотрел под MSIE и FireFox-ом
Функцию можно упростить до :
function addslashes (str) {
      var reg1 = /(["\'\\r\\n]{1})/g;
      str = str.replace(reg1, "\\\\$1");
      return str;
}
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Viktor Kudlak

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 2
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.meganet.org.ru
Add slashes (reg_egp)
« Ответ #2 : 03 Января 2005, 02:33:25 »
\\$1 - это именно так, т.е. не подставляя значания, которое в $1...

Слушай, не поверишь!
Вчера у меня автоматом скачался последний Сервис Пак для W2k, и после установки, тут же заработало в MS IE 6.0.
Я уж не знаю, может я что-то подправил и сам не обратил внимания, но теперь и у меня работает...

Ладно, всем спасибо, теперь работает..
Кому интересно:


function serialize(obj) {
var str = new String();
str = \'{\';
i = 0;
for (var item in obj) {
str += (i > 0?\',\':\'\') + item + \':\' + getitemtype(obj[item]);
i++;
}
str += \'}\';
return str;
}
function unserialize(str) {
eval(\'obj = \' + str);
return obj;
}
function getitemtype(item) {
if(item === undefined) {
return "\'\'";
} else if(typeof(item) == \'object\') {
var ret = serialize(item);
return ret;
} else if(typeof(item) === \'number\') {
return item;
} else if(typeof(item) == \'string\') {
return "\'" + addslashes(item) + "\'";
} else if(typeof(item) == \'function\') {
//return item;
return "\'\'";
} else {
alert(\'Unknown serialize type: \' + typeof(item));
}
}
function addslashes (str) {
var reg1 = /(["\']{1})/g;
var reg2 = /[\\r]{1}/g;
var reg3 = /[\\n]{1}/g;
str = str.replace(reg1, "\\\\$1");
str = str.replace(reg2, "\\\\r");
str = str.replace(reg3, "\\\\n");
return str;
}
function stripslashes(str) {
re = /\\\\([\'"]{1})/g;
str = str.replace(re, \'$1\');
return str;
}

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28