ajsie
ajsie

Reputation: 79676

Detect numbers or letters with jQuery/JavaScript?

I want to use an if-statement to run code only if the user types in a letter or a number.

I could use

if (event.keyCode == 48 || event.keyCode == 49 || event.keyCode == 50 || ...) {
  // run code
}

Is there an easier way to do this? Maybe some keycodes don't work in all web browsers?

Upvotes: 82

Views: 107384

Answers (14)

BoxaBole
BoxaBole

Reputation: 89

A very simple, but useful method to try (i needed on a keyup event, letters only), use console.log() to check, typeOfKey is a string so you can compare. typeOfKey is either (Digit or Key)

 let typeOfKey = e.code.slice(0,-1) 
  if(typeOfKey === 'Key'){
  console.log(typeOfKey)  
}

Upvotes: 0

Donnie Gallocanta Jr.
Donnie Gallocanta Jr.

Reputation: 29

Use $.isNumeric(value); return type is boolean

$(document).ready(function () {
  return $.isNumeric(event.keyCode);
});

Upvotes: 0

Bharat Kumar
Bharat Kumar

Reputation: 97

Accept numbers or letters with JavaScript by Dynamic Process using regular expression.

Add onkeypress event for specific control

onkeypress="javascript:return isNumber(event)"

function numOnly(evt) {
  evt = evt || window.event;
  var charCode = evt.which || evt.keyCode;
  var charStr = String.fromCharCode(charCode);

  if (/[0-9]/i.test(charStr)) {
    return true;
  } else {
    return false;
  }
}

function Alphanum(evt) {
  evt = evt || window.event;
  var charCode = evt.which || evt.keyCode;
  var charStr = String.fromCharCode(charCode);

  if (/[a-z0-9]/i.test(charStr)) {
    return true;
  } else {
    return false;
  }
}

Upvotes: 0

user4584103
user4584103

Reputation:

number validation, works fine for me

$(document).ready(function () {
  $('.TxtPhone').keypress(function (e) {
    var key = e.charCode || e.keyCode || 0;

    // only numbers
    if (key < 48 || key > 58) {
      return false;
    }
  });
});

Upvotes: 0

alex_P
alex_P

Reputation: 1

You can also use charCode with onKeyPress event:

if (event.charCode > 57 || event.charCode < 48) {
  itsNotANumber();
} else {
  itsANumber();
}

Upvotes: 0

bestestefan
bestestefan

Reputation: 871

$('#phone').on('keydown', function(e) {
  let key = e.charCode || e.keyCode || 0;

  // 32 = space - border of visible and non visible characters - allows us to backspace and use arrows etc
  // 127 - delete
  if (key > 32 && (key < 48 || key > 58) && key !== 127) {
    e.preventDefault();
    return false;
  }
});

modified answer of @user4584103, allows us to remove characters, and navigate in input box and filter out every not number character

Upvotes: 1

MD Sulaiman
MD Sulaiman

Reputation: 175

For numeric values:

function validNumeric() {
  var charCode = event.which ? event.which : event.keyCode;
  var isNumber = charCode >= 48 && charCode <= 57;

  if (isNumber) {
    return true;
  } else {
    return false;
  }
}

Here, 48 to 57 is the range of numeric values.

For alphabetic values:

function validAlphabetic() {
  var charCode = event.which ? event.which : event.keyCode;
  var isCapitalAlphabet = charCode >= 65 && charCode <= 90;
  var isSmallAlphabet = charCode >= 97 && charCode <= 122;

  if (isCapitalAlphabet || isSmallAlphabet) {
    return true;
  } else {
    return false;
  }
}

Here, 65 to 90 is the range for capital alphabets (A-Z), and

97 to 122 is the range for small alphabets (a-z).

Upvotes: 3

Fede Scuoteguazza
Fede Scuoteguazza

Reputation: 73

As @Gibolt said, you should use event.key.

Because charCode, keyCode and which are being deprecated.

Upvotes: 2

Andy E
Andy E

Reputation: 344517

If you want to check a range of letters you can use greater than and less than:

if (event.keyCode >= 48 && event.keyCode <= 57) {
  alert('input was 0-9');
}
if (event.keyCode >= 65 && event.keyCode <= 90) {
  alert('input was a-z');
}

For a more dynamic check, use a regular expression:

const input = String.fromCharCode(event.keyCode);

if (/[a-zA-Z0-9-_ ]/.test(input)) {
  alert('input was a letter, number, hyphen, underscore or space');
}

See the MDC documentation for the keyCode property, which explains the difference between that and the which property and which events they apply to.

Upvotes: 153

Douwe Maan
Douwe Maan

Reputation: 6878

if (event.keyCode >= 48 && event.keyCode <= 90) {
  // the key pressed was alphanumeric
}

Upvotes: 7

Gibolt
Gibolt

Reputation: 47089

Use event.key and modern JS!

No number codes anymore. You can check key directly.

const key = event.key.toLowerCase();

if (key.length !== 1) {
  return;
}

const isLetter = (key >= 'a' && key <= 'z');
const isNumber = (key >= '0' && key <= '9');

if (isLetter || isNumber) {
  // Do something
}

You could also use a simple regex. ^$ ensures 1 char, i ignores case

/^[a-z0-9]$/i.test(event.key)

or individually:

const isLetter = /^[a-z]$/i.test(event.key)
const isNumber = /^[0-9]$/i.test(event.key)

Upvotes: 46

Nigus Abate
Nigus Abate

Reputation: 11

Simply you can add your Html forms in the input field like this:

...onkeypress ="return /[a-z .@ 0-9]/i.test(event.key)" required accesskey="4"

You don't need any function. This Validation works only with the email field. Don't use naming or number. To use number, remove email regular expression like this:

...onkeypress ="return /[a-z ]/i.test(event.key)" required accesskey="4"

For number only:

...onkeypress ="return /[0-9]/i.test(event.key)" required accesskey="4"

Don't forget, to add for each input fields their own value.

<div class="form-group">
   <input type="Email" class="form-control " id="EMAILADDRESS" name="EMAILADDRESS" placeholder="Email Address"   autocomplete="false" onkeypress ="return /[a-z .@ 0-9]/i.test(event.key)" required accesskey="4"/>  
</div>

Upvotes: 1

Jakub Muda
Jakub Muda

Reputation: 6694

To detect letters & numbers when using <input> or <textarea> you can use input event.

This event fires when <input> or <textarea> value changes so there is no need to worry about keys like Alt, Shift, arrows etc. Even more - if you use mouse to cut part of the text the event fires as well.

var element = document.getElementById('search');

element.addEventListener('input',function(e){

  console.log(element.value);

});
<input id="search" type="text" placeholder="Search" autocomplete="off">

Upvotes: 1

Tim Down
Tim Down

Reputation: 324507

First, if you're doing this, make sure it's in the keypress event, which is the only event for which you can reliably obtain information about the character the user has typed. Then I'd use the approach Andy E suggested:

document.onkeypress = function(evt) {
   evt = evt || window.event;
   var charCode = evt.which || evt.keyCode;
   var charStr = String.fromCharCode(charCode);
   if (/[a-z0-9]/i.test(charStr)) {
       alert("Letter or number typed");
   }
};

If you want to check for backspace, I'd use the keydown event instead and check for a keyCode of 8 because several browsers (including Chrome) do not fire a keypress event for the backspace key.

Upvotes: 27

Related Questions