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.

¿Fue útil?

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top