Check if a character is a letter

Tell us what’s happening:

How do i check if a character in a string is a letter. Please refer to the line where I have commented as ‘here ---->’ the match funcction only matches the letters. How do i check if the ascii value is pointing to a letter

Your code so far

function rot13(str) { // LBH QVQ VG!
var str1='';
  var letters=/^[A-Z]/;
  for(var i=0;i<str.length;i++)
    {
    if((str.charAt(i)!==' ')&&(str.charAt(i)!=='?')&&(str.charAt(i)!=='!')&&(str.charAt(i)!=='.'&&(str.charAt(i)!==',')))
        {
      var code=str.charCodeAt(i);
    /*here --->*/      if(letters.test(String.fromCharCode(code-13)))
             {
             str1=str1+String.fromCharCode(code+13);
             }
          else
            {
            str1=str1+String.fromCharCode(code-13);
            }
         }
      else 
        {
          str1=str1+str.charAt(i);
        }
    }
  return str1;
  
}

// Change the inputs below to test
rot13("SERR CVMMN!");

Your browser information:

Your Browser User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36.

Link to the challenge:
https://www.freecodecamp.org/challenges/caesars-cipher

Hi @camperextraordinaire thank you for your quick response. :slight_smile:
The logic behind the challenge is to decipher the input by increasing or decreasing the ascii values. Now Suppose after decreasing the ascii value, the character is not a letter(eg: the input is SERR) If you decrease the ascii value of E by 13, it would be pointing to the character ‘8’. In this case, I’ll have to not decrease, but increase the value by 13 to get a letter. This is where I am getting stuck. I am trying to check if the character returned by the ascii value is a letter. Hence, if(letters.test(String.fromCharCode(code-13)))
Please correct me if I’m wrong.

So with your current code, if the converted code is a letter, you are then adding 13 to the code and then converting it to a character. If the converted code is a letter, then why not just use this letter (by using fromCharCode(code - 13). For the first character “S” in the example string, code - 13 is 70 (which is the letter “F”). If you add 13 to code (which is what you are doing), then you are converting the value 96 to `. That is not what you want to do.

1 Like

THanks a lot @camperextraordinaire that worked. What I did was tested if the ascii code is greater or lesser than 78. Because if the code was lesser than 78, and if i had subtracted 13 from it, I would have gotten the character as a number.

var code=str.charCodeAt(i);
          if(code<78)
             {
             str1=str1+String.fromCharCode(code+13);
             }
          else
            {
            str1=str1+String.fromCharCode(code-13);
            }
         }
      else 
        {
          str1=str1+str.charAt(i);
        }

This worked like a charm. Thanks a lot again. Have a nice weekend. :smiley: