JavaScript, la mejor manera de saber si un Val es un solo dígito
-
27-09-2019 - |
Pregunta
¿Cuál es la mejor manera de saber si un valor en JavaScript es un solo dígito? He estado haciendo algo como
var valAsString = '' + val;
if (valAsString.match(/\d/) {}
Aclaración: me refiero a uno de 0,1,2,3,4,5,6,7,8,9
Además, ¿lo que debería tener trabajo? Estoy sorprendido de cuántas formas diferentes en que las personas inventan para esto.
Solución
los /\d/
regexp coincidirá con un dígito en cualquier lugar de una cadena, por ejemplo en "foo1"
coincidirá "1"
.
Para un enfoque de regexp, necesite algo como esto, para asegurarse de que la cadena contenga un solo dígito:
if (/^\d$/.test(val)) {
//..
}
Tenga en cuenta que estoy usando el test
método, que se recomienda cuando solo desea verificar si una cadena coincide con el patrón, también, el test
El método internamente se convertirá para aguantar el argumento.
Otro enfoque breve que no es de Regexp:
function isDigit(val) {
return String(+val).charAt(0) == val;
}
Otros consejos
Ummm, verifique si su longitud de cadena es igual a una?
if (typeof(val) === "number")
{
var valAsString = val.toString(10);
if (valAsString.length === 1) {}
}
Sin embargo, esto no aceptará números negativos o números con componentes decimales.
Si no desea incluir negativos, esto funcionará, al igual que su solución.
var valAsString = val.toString();
if (valAsString.length === 1) {}
Simplemente puede verificar si la cadena está entre -10 y 10 (suponiendo que desea incluir negativos). Esto será el más rápido, pero no funcionará para los no enteros, por lo que probablemente sea mejor evitado.
Si desea incluir negativos, probablemente verificaría para ver si el número es un entero, entonces iría con algo como esto:
var isSingleDigitIncludingNegatives = function( arg ) {
return ((typeof(myNum)=='number') && (myNum.toString().indexOf('.')==-1)) && (( -10 < arg ) && ( arg < 10))
Asumiendo que val
ya es numérico ...
if ((val >= 0) && (val < 10) && (Math.floor(val) == val)) {
// ...
}
Puede usar la siguiente modificación de su expresión regular:
valAsString.match(/^\d$/)
pienso
(+val + val % 1 + 10) % 10 === val
debería hacerlo, suponiendo que solo desea aceptar valores de tipo number
.
Una solución más limpia es
typeof val === 'number' && val >>> 0 === val % 10
que se puede adaptar fácilmente para incluir valores de otros tipos.
Qué tal algo como esto:
var check = parseFloat(val);
var isSingleDigit = (!isNaN(check) && (check < 10 && check > -10) && check.toString().length ==1);