Controllare se la stringa contiene solo cifre
-
21-09-2019 - |
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?
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