×
Creating solutions

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
No part of this article may be reproduced without mention of the author and URL to this website.
For more information, see the About section.

Comments

Article has no comments.

Add a comment

Name (required)
Website
Message (required)
Submit
From latest