ЙажаСценарий / Говнокод #2629 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
var rus = new String("йцукенгшщзфывапролдячсмитьЙЦУКЕНГШЩЗФЫВАПРОЛДЯЧСМИТЬ");
var eng = new String("qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM");
for (var i in rus) {
	reg = new RegExp(rus[i], 'g');
	pass = pass.replace(reg, eng[i]);
}

Конвертация русских чаров в английские в соответствии с расположением на клаве. Зачем - не суть важно. Регулярки! Десятки их! Полсотни итераций для простой замены русских букв на английские!

Запостил: ixth ixth, (Updated )

Комментарии (20) RSS

    • Я сделал так и не уверен, что это самый правильный способ:
      var rus = "йцукенгшщзфывапролдячсмитьЙЦУКЕНГШЩЗФЫВАПРОЛДЯЧСМИТЬ",
      	eng = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
      
      pass = pass.replace(/[а-яА-Я]/g, function(c){
      	var i = rus.indexOf(c);
      	return eng[i];
      });

      Можно все упростить и заюзать хэш, конечно. Я сильно неправ?
      Ответить
      • Мм.. правильнее я вижу только такое:

        var table = {"й":"q","ц":"w","у":"e","к":"r","е":"t","н":"y","г":"u","ш":"i","щ":"o","з":"p","ф":"a","ы":"s","в":"d","а":"f","п":"g","р":"h","о":"j","л":"k","д":"l","я":"z","ч":"x","с":"c","м":"v","и":"b","т":"n","ь":"m","Й":"Q","Ц":"W","У":"E","К":"R","Е":"T","Н":"Y","Г":"U","Ш":"I","Щ":"O","З":"P","Ф":"A","Ы":"S","В":"D","А":"F","П":"G","Р":"H","О":"J","Л":"K","Д":"L","Я":"Z","Ч":"X","С":"C","М":"V","И":"B","Т":"N","Ь":"M"};
        
        var myvar = 'Йцукен'.replace(/[а-я]/gi, function(i){ return table[i]; });


        Этот способ достаточно быстр (при замене символа никакие методы не вызываются), хоть и памяти будет расходовать немного больше из-за хэша. (Но кого сейчас это волнует?)
        Ответить
          • Мне тоже 😉
            Но мы же знаем javascript..

            for(var i = 0, array = []; i < 58; i++) array.push('"' + rus[i] + '":"' + eng[i] + '"');
            document.write('{' + array.join(',') + '};');
            Ответить
        • var rus = "йцукенгшщзфывапролдячсмитьЙЦУКЕНГШЩЗФЫВАПРОЛДЯЧСМИТЬ".split(''),
          	eng = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM".split('');
          var cnt=rus.length;
          var table = {};
          for(var i=0;i<cnt;i++){
          	table[rus[i]]=eng[i];
          }
          var myvar = 'Йцукен'.replace(/[а-я]/gi, function(i){ return table[i]; });
          Ответить
  • Еще и работает, ЕМНИП, не везде. Поддержка обращения к i-ому символу строки как к элементу массива появилась недавно.
    Ответить
    • Ни разу не видел, чтобы кто-то юзал для этого charAt.
      Ответить
    • На самом деле, предполагается, что этих символов попросту не будет в изначальной строке. Не может быть в пароле брэкетов, запятых и точек. Буковок Ё тоже.
      Ответить
      • Предполагает разработчик, а клава у юзера ))
        А самое интересное, что "ё" вашей регуляркой не ловится.
        'йцукенЁЖ' - > 'qwertyЁundefined' нормально?
        var rus = "йцукенгшщзфывапролдячсмитьЙЦУКЕНГШЩЗФЫВАПРОЛДЯЧСМИТЬБЮЁЖЭХЪбюёжэх",
        	eng = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
        pass = "123testйцукенЁЖ'!".replace(/[^\w]/g, function(c){
        	var i = rus.indexOf(c);
        	return i >-1 ? (eng.charAt(i) || i.toString(32)) : 'x';
        });
        //123testqwerty1m1nxx
        Ответить
  • Плох тот язык где пол сотни итераций это много
    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8