javascript, best way to tell if a val is a single digit
-
27-09-2019 - |
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.
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);