×
Vytvárame riešenia

Ktorý spôsob v JavaScripte je najlepší pre validáciu čísla

Až prax ukazuje, že postupy, ktoré boli bežne zaužívané a o ktoré sa človek stále opiera, nie sú vždy tie najlepšie. Príkladom je validácia čísla, ktorá overuje či kontrolovaná hodnota najmä vo formáte reťazca je platné číslo. Takáto kontrola je veľmi často potrebná pri práci s formulármi, kde každá hodnota poľa formulára je reťazec.
Ešte donedávna som mal poznačenú pre kontrolu čísla nasledujúcu funkciu.
Príklad: Funkcia isNumber().
1
2
3
var = function isNumber (value) {
return typeof value === "number" && isFinite(value);
}
Keďže posledné roky namiesto funkcií typu isNumber() sa spolieham na frameworky, nemal som potrebu skúmať efektivitu tohto riešenia.
Ale ako sa ukázalo, testovanie čísla v JavaScripte je hotová veda. Príkladom je stránka isNumber Test Cases, ktorá porovnáva efektivitu 17 riešení, medzi ktorými je aj to moje. No ako vidieť, nebolo zrovna najúspešnejšie.
Príklad: Testovaných 17 riešení isNumber().
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1. !isNaN(parseFloat(n)) && isFinite(n)
2. !isNaN(n) && !isNaN(parseFloat(n))
3. !isNaN((n))
4. !isNaN(parseFloat(n))
5. typeof(n) != "boolean" && !isNaN(n)
6. parseFloat(n) === Number(n)
7. parseInt(n) === Number(n)
8. !isNaN(Number(String(n)))
9. !isNaN(+('' + n))
10. (+n) == n
11. n && /^-?\d+(\.\d+)?$/.test(n + '')
12. isFinite(Number(String(n)))
13. isFinite(String(n))
14. !isNaN(n) && !isNaN(parseFloat(n)) && isFinite(n)
15. parseFloat(n) == n
16. (n - 0) == n && n.length > 0
17. typeof n === 'number' && isFinite(n)
Za najlepšie riešenie bola vyhodnotená nasledujúca funkcia.
Príklad: Odporúčaná funkcia isNumber().
1
2
3
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
Pre "paranoikov" je možné odporučiť riešenie číslo 14. Ide o rozšírenie riešenia č.1.
Príklad: Rozšírenie isNumber().
1
!isNaN(n) && !isNaN(parseFloat(n)) && isFinite(n)
Príklad: Príklady testovacích hodnôt.
1
2
3
4
5
6
7
console.log(isNumber(1));
console.log(isNumber(1.2));
console.log(isNumber(-1.4));
console.log(isNumber("1.2a"));
console.log(isNumber(+1.2));
console.log(isNumber("+1.2a"));
console.log(isNumber("+1.2"));

Záver

Ktorú funkciu pre validáciu čísla používate vy?


JavaScript,programovanie,number,isNumber
Žiadna časť tohto článku nesmie byť reprodukovaná bez uvedenia autora a URL na túto stránku.
Viac informácií nájdete v sekcii O projekte.

Komentáre

Článok neobsahuje zatiaľ žiadne komentáre.

Pridať komentár

Meno (povinné)
Web
Správa (povinné)
Odoslať
Od najnovších