-2

I've been trying to solve this question to check if a character is in uppercase, lowercase or is a number and I've been able to do it for the uppercase and lowercase but I can't do it for the number.

let letterOrNumber = prompt("Enter an uppercase letter, a lowercase letter or a number");

let upperCaseLetter = letterOrNumber.toUpperCase();
let lowerCaseLetter = letterOrNumber.toLowerCase();
let userNumber = parseInt(letterOrNumber)

if (letterOrNumber === upperCaseLetter) {
    console.log(letterOrNumber + " is an uppercase letter.");
}

else if (letterOrNumber === lowerCaseLetter) {
    console.log(letterOrNumber + " is a lowercase letter.");
}

else if (letterOrNumber === userNumber) {
    console.log(letterOrNumber + " is a number.");
}

else {
    console.log(letterOrNumber + " is not a letter or number");
}
Sierszo
  • 5
  • 1
  • Does this answer your question? [Check whether variable is number or string in JavaScript](https://stackoverflow.com/questions/1303646/check-whether-variable-is-number-or-string-in-javascript) or [Validate decimal numbers in JavaScript - IsNumeric()](https://stackoverflow.com/questions/18082/validate-decimal-numbers-in-javascript-isnumeric) and [Best way to check if a character is a number of letter in javascript?](https://stackoverflow.com/questions/23282512/best-way-to-check-if-a-character-is-a-number-of-letter-in-javascript) – pilchard Sep 07 '21 at 01:04

4 Answers4

1

For a single String character you can use !isNaN (not Not a Number).
Also, make sure to first get rid of Numerics, before matching Alpha characters

const letterOrNumber = prompt("Enter an uppercase letter, a lowercase letter or a number");

const upperCaseLetter = letterOrNumber.toUpperCase();
const lowerCaseLetter = letterOrNumber.toLowerCase();
const isNum = !isNaN(letterOrNumber);

if (isNum) {
  console.log(letterOrNumber + " is a number.");
} else if (letterOrNumber === upperCaseLetter) {
  console.log(letterOrNumber + " is an uppercase letter.");
} else if (letterOrNumber === lowerCaseLetter) {
  console.log(letterOrNumber + " is a lowercase letter.");
} else {
  console.log(letterOrNumber + " is not a letter or number");
}
Roko C. Buljan
  • 196,159
  • 39
  • 305
  • 313
0

Use isNaN to check whether it is a number or not.

let letterOrNumber = prompt("Enter an uppercase letter, a lowercase letter or a number");

let upperCaseLetter = letterOrNumber.toUpperCase();
let lowerCaseLetter = letterOrNumber.toLowerCase();


if (!isNaN(letterOrNumber)) {
  console.log(letterOrNumber + " is a number.");
} else if (letterOrNumber === upperCaseLetter) {
  console.log(letterOrNumber + " is an uppercase letter.");
} else if (letterOrNumber === lowerCaseLetter) {
  console.log(letterOrNumber + " is a lowercase letter.");
} else {
  console.log(letterOrNumber + " is not a letter or number");
}
Spectric
  • 30,714
  • 6
  • 20
  • 43
0

In addition to the other answers, I wanted to note that the reason your code currently isn't working for the number case is because you are compairing letterOrNumber, which is a string, to userNumber, which is a number. The types don't match. Therefore, the condition is false and moves on to the else branch.

Barley
  • 143
  • 1
  • 9
  • This would be an issue if it ever got that far, but all numbers are upperCase letters by the OPs code since number chars have no case and the first check is upperCase. – pilchard Sep 07 '21 at 01:13
0

An alternative approach would be to use a regex to match uppercase characters, lowercase characters, or numbers. This method will catch characters like _ or characters with diacritics like Š and log the output for them appropriately.

function check(str = '') {

  const regex = /([A-ZÀ-ž])|([a-zà-ž])|([0-9])/;
  const match = str.match(regex);

  // `match` returns an array, so if it exists (has length)
  if (match) {

    // `slice` off the first element (which is the complete match)
    // and then find the index of the element which isn't undefined
    const index = match.slice(1).findIndex(el => el);

    // You can then log the result based on the index
    switch(index) {
      case 0: return 'Uppercase';
      case 1: return 'Lowercase';
      case 2: return 'Number';
    }
  }

  // Returns "none` if there is no match
  return 'None';

}

console.log(check('_'));
console.log(check('1'));
console.log(check('ž'));
console.log(check('A'));
console.log(check('z'));
console.log(check('+'));
console.log(check('/'));
console.log(check('B'));
console.log(check('Š'));
console.log(check(undefined));
Andy
  • 61,948
  • 13
  • 68
  • 95