Question

whats the best way to tell if a value in javascript is a single digit. Ive been doing something like

var valAsString = '' + val;
if (valAsString.match(/\d/) {}

clarification: I mean one of 0,1,2,3,4,5,6,7,8,9

Also, should what I have work? Im surprised how many different ways people are coming up with for this.

Was it helpful?

Solution

The /\d/ regexp will match a digit anywhere on a string, for example in "foo1" will match "1".

For a regexp approach need something like this, to ensure that the string will contain a single digit:

if (/^\d$/.test(val))  {
  //..
}

Note that I'm using the test method, which is recommended when you only want to check if a string matches the pattern, also, the test method internally will convert to sting the argument.

Another short non-regexp approach:

function isDigit(val) {
  return String(+val).charAt(0) == val;
}

OTHER TIPS

Ummm, check if it's string length is equal to one?

if (typeof(val) === "number")
    {
    var valAsString = val.toString(10);
    if (valAsString.length === 1) {}
    }

This won't accept negative numbers or numbers with decimal components though.

If you don't want to include negatives this will work, as will your solution.

var valAsString = val.toString();
if (valAsString.length === 1) {}

You could just check if the string is between -10 and 10 (assuming you want to include negatives). This will be fastest, but will not work for non-integers, so its probably best avoided.

If you do want to include negatives I'd probably check to see if the number is an integer then I'd go with something like this:

var isSingleDigitIncludingNegatives = function( arg ) {
    return ((typeof(myNum)=='number') && (myNum.toString().indexOf('.')==-1)) && (( -10 < arg ) && ( arg < 10))

Assuming that val is already numeric...

if ((val >= 0) && (val < 10) && (Math.floor(val) == val)) {
    // ...
}

You can use the below modification of your regular expression:

valAsString.match(/^\d$/)

I think

(+val + val % 1 + 10) % 10 === val

should do it, assuming you only want to accept values of type number.

A cleaner solution is

typeof val === 'number' && val >>> 0 === val % 10

which can be easily adapted to include values of other types.

How about something like this:

var check = parseFloat(val);
var isSingleDigit = (!isNaN(check) && (check < 10 && check > -10) && check.toString().length ==1);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top