2016-07-09 3 views
1

Zum Beispiel, wenn wir sagen:Wie erzwinge ich parsInt, um NaN bei einer beliebigen Zeichenfolge zurückzugeben?

parseInt("128"); // => 128 

einwandfrei funktioniert.

Wenn wir sagen:

parseInt("a128"); // => NaN 

Aber wenn wir sagen:

parseInt("123a"); // => 128 again :(

Gibt es eine explizite Möglichkeit, die Anzahl nur und wenn irgendein Zeichen aus dem Alphabet erscheint in dem Argumente zu analysieren, es würde zurückkehren NaN?

+0

Sie zu überprüfen Versuchen, ob eine Zeichenfolge Zahlen enthält nicht nur? – Script47

+0

Versuchen, die Zahl zu analysieren und die Alphabete nicht zu ignorieren. Wenn ein Alphabet-Zeichen erscheint, würde es ein NaN zurückgeben. – omerowitz

+3

Sie könnten stattdessen 'Number()' verwenden. –

Antwort

2

für Ihr Szenario, wo Sie mit Zeichenfolge umgehen müssen, können Sie auch Nummer Funktion verwenden. Number() Funktion konvertiert das Objekt Argument in eine Zahl, die den Wert des Objekts darstellt


 
//test cases 
 
console.log(Number("123")); 
 
console.log(Number("123a")); 
 
console.log(Number("a123"));

0

Ist es das, was Sie erwarten?

function checkIsStringNaN (str) { 
    return isNaN(str) ? NaN : parseInt(str) 
} 

checkIsStringNaN("128") // 128 
checkIsStringNaN("a128") // NaN 
checkIsStringNaN("123a") // NaN 
2

parseInt nicht auf diese Weise arbeiten, die specs überprüfen.

  1. Entfernt führende und nachfolgende Leerzeichen.
  2. Wenn ein Zeichen gefunden wird, die als ganze Zahl nicht interpretiert wird und nicht von Radix unterstützt wird, dann wird es
  3. ignoriert

auch immer Sie es auf diese Weise arbeiten

indem zwingen kann

(function(){ 
 
      var old = parseInt; 
 
      parseInt = function(x, y){ 
 
       if ((!y || y == 10) && isNaN(Number(x))) { return NaN } 
 
       return old.apply(this, arguments) 
 
      } 
 
    })(); 
 

 
//test cases 
 
console.log(parseInt("123")); 
 
console.log(parseInt("123a")); 
 
console.log(parseInt("123a", 16)); 
 
console.log(parseInt("a123"));

1

Sie können die Funktion tun sich selbst als gut:

function in_array (array, key){ 
    var check = false; 
    for(var i = 0; i < array.length; i++){ 
     if(key == array[i]){ 
      check = true; 
      break; 
     } 
    } 
    return check; 
} 

var allowedchars=["0","1","3","4","5","6","7","8","9"]; 

function checkIsStringNaN (str){ 
    var b = true; 
    for(var i = 0, i < str.length; i++){ 
     if(!in_array(allowedchars, str.charAt(i))){ 
      b = false; 
      break; 
     } 
    } 
    if(!b) { 
     return NaN; 
    } else { 
     return parseInt(str); 
    } 
} 
Verwandte Themen