Vreau sa verific daca un "string" conține doar cifre. Am folosit asta:
var isANumber = isNaN(theValue) === false;
if (isANumber){
..
}
Dar a dat seama că acesta permite, de asemenea, +
și -
. Practic, vreau să mă asigur că o "intrare" conține DOAR cifre și nici alte caractere. Din +100 " și " -5
sunt ambele numere, isNaN()
nu este modul corect de a merge.
Poate un regexp este ceea ce am nevoie? Orice sfaturi?
Aici's un alt interesant, ușor de citit modalitate de a verifica dacă un șir conține numai cifre.
Această metodă funcționează prin divizarea șir într-o matrice folosind răspândirea operator, și apoi folosește fiecare()
metoda pentru a testa dacă toate elementele (caractere) în matrice sunt incluse în șirul de 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
Aici este o soluție fără a folosi expresii regulate:
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
}
în cazul în care 48 și 57 sunt char coduri pentru "0" și "9", respectiv.
function isNumeric(x) {
return parseFloat(x).toString() === x.toString();
}
Deși acest lucru va reveni "false" pe siruri de caractere de conducere sau zerouri la sfârșit.