Domanda

Voglio controllare se un string contiene solo cifre. Ho usato questa:

var isANumber = isNaN(theValue) === false;

if (isANumber){
    ..
}

Ma si rese conto che permette anche + e -. Fondamentalmente, voglio fare in modo un input contiene solo cifre e nessun altro carattere. Dal momento che +100 e -5 sono entrambi numeri, isNaN() non è la strada giusta da percorrere. Forse un regexp è quello che mi serve? Eventuali suggerimenti?

È stato utile?

Soluzione

come su

var isnum = /^\d+$/.test(val);

Altri suggerimenti

string.match(/^[0-9]+$/) != null;
String.prototype.isNumber = function(){return /^\d+$/.test(this);}
console.log("123123".isNumber()); // outputs true
console.log("+12".isNumber()); // outputs false

Se si desidera supportare anche per valori float (Dot valori separati) allora si può usare questa espressione:

var isNumber = /^\d+\.\d+$/.test(value);

Questo è ciò che si desidera

function isANumber(str){
  return !/\D/.test(str);
}

Ecco un altro, interessante modo leggibile per verificare se una stringa contiene solo cifre.

Questo metodo funziona suddividendo la stringa in un array usando l' operatore di diffusione , e quindi utilizza il every() metodo per verificare se tutti gli elementi (caratteri) nella matrice sono inclusi nella stringa di cifre '0123456789':

const digits_only = string => [...string].every(c => '0123456789'.includes(c));

console.log(digits_only('123')); // true
console.log(digits_only('+123')); // false
console.log(digits_only('-123')); // false
console.log(digits_only('123.')); // false
console.log(digits_only('.123')); // false
console.log(digits_only('123.0')); // false
console.log(digits_only('0.123')); // false
console.log(digits_only('Hello, world!')); // false

Bene, è possibile utilizzare la seguente espressione regolare:

^\d+$

Ecco una soluzione senza usare le espressioni regolari:

function onlyDigits(s) {
  for (let i = s.length - 1; i >= 0; i--) {
    const d = s.charCodeAt(i);
    if (d < 48 || d > 57) return false
  }
  return true
}

dove 48 e 57 sono i codici char a "0" e "9", rispettivamente.

function isNumeric(x) {
    return parseFloat(x).toString() === x.toString();
}

Anche se questo tornerà false sulle stringhe con iniziali o finali zeri.

c="123".match(/\D/) == null #true
c="a12".match(/\D/) == null #false

Se una stringa contiene solo delle cifre che restituirà null

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top