Решение Кевина М компактно и элегантно. Однако есть одна маленькая ошибка: регулярное выражение, используемое с функцией замены, не ограничивает замену буквенными символами. Диапазон символов [A-z]
включает знаки пунктуации ([
\
] ^ _ `
), которые будут заменены на буквы, когда их следует оставить в одиночку.
Исправленная версия выглядит так:
function r(a,b){return++b?String.fromCharCode((a<"["?91:123)>(a=a.charCodeAt()+13)?a:a-26):a.replace(/[a-zA-Z]/g,r)}
Это все еще только 116 байтов. Замечательно маленький и довольно умный.
(Извините за публикацию полного ответа; мне все еще не хватает 50 представителей, необходимых для публикации этого комментария к превосходному ответу Кевина.)