2017-01-12 3 views
1

Vorgelegt darüber, an dieser Stelle arbeiten alle Stücke getrennt, aber nicht zusammen. Ich habe versucht, Dinge zu verschieben, um zu sehen, ob es nur ein Bestellproblem war, aber das hat es nicht behoben. Der Versuch, sie in ein großes if/else zu bringen, schien auch nicht zu funktionieren. Ich kann entweder die Zeichenkette nur alphanumerische Zeichen anzeigen lassen ODER 'keine Zeichenkette' anzeigen, aber ich kann den Code nicht ausführen, um beides zu tun. Dieser Abschnitt wird nur die richtigen alphanumerics zurückkehren: „nicht eine Zeichenfolge“Return Alphanumerics -Ausgabe mit der Kombination von Teilen der Funktion

function nothingSpecial(str) { 
    var re = /[A-Z\s0-9]/i; 
    var newStr = ''; 

    for(var i=0; i<str.length; i++){ 
    if (re.test(str[i])){ 
     newStr = newStr + str[i]; 
    } 
    } 
    return newStr; 
    if(str.length <= 0) { 
    return ("Not a string!"); 
    } 

     if (typeof str !== String) { 
     return "Not a string!"} 

    } 

nothingSpecial("[email protected]#$#") 

Dies wird zurückkehren, auch wenn es alphanumerics zeigen sollte, aber richtig ist oder scheinbar so für Zahlen und „“

function nothingSpecial(str) { 

    var re = /[A-Z\s0-9]/i; 
    var newStr = ''; 

    if(str.length <= 0) { 
    return ("Not a string!"); 
    } 

    if (typeof str !== String) { 
    return "Not a string!"} 

    for(var i=0; i<str.length; i++){ 
    if (re.test(str[i])){ 
     newStr = newStr + str[i]; 
    } 
    } 
    return newStr; 

    } 
nothingSpecial(23) 

Was mache ich falsch? -Vielen Dank im Voraus!

+0

Der erste Schnipsel eine Rückkehr in der Mitte der Funktion hat, werden die anderen Linien nicht – edc65

+0

ausgeführt werden Was sind Sie versuchen zu tun? Selbst wenn Sie sich früher angemeldet haben, wie können wir es wissen? – edc65

+0

Ihr zweites Snippet gibt "nicht eine Zeichenfolge" korrekt zurück, da Sie die Funktion mit einem Zahlargument (23) aufrufen. Eine Nummer ist keine Zeichenfolge. – edc65

Antwort

1

Edit: Okay, basierend auf Ihren Kommentar, hier gehen Sie:

Das ist Ihr Problem:

if (typeof str !== String) 

Du vergleichst das Ergebnis typeof str, die ein String ist, mit der object constructor für Strings, String, die eine Funktion ist. Es schlägt fehl, weil Sie nicht nach einer Zeichenfolge suchen, sondern eine Zeichenfolge (die Ausgabe von typeof, die immer eine Zeichenfolge ist, unabhängig vom Typ, den Sie überprüfen) mit einer Funktion vergleichen. Ihr Vergleich sollte stattdessen folgendermaßen aussehen:

if (typeof str !== 'string') 

Edit: Heres eine JSFiddle.

+0

Meine Applogies! Es muss "not a string" zurückgegeben werden, wenn Zahlen (oder irgendetwas, was nicht ein String ist) übergeben werden - es sollte keine Zahlen in einen String konvertieren. – Megan

+0

Ich habe zwei Fehler angesprochen, die Sie gemacht haben, die Lösung für den zweiten hätte das für Sie gelöst. Ich habe meine Antwort bearbeitet, um den Verweis auf die erste zu entfernen. – chrBrd

0

jede Art von Argument zu nehmen, zu bespannen Umwandlung und halten nur alphanumerische Zeichen:

function nothingSpecial(str) { 

    str += '' // convert any argument to string 

    str = str.replace(/[^A-Z\s0-9]/gi, "") // remove all characters except alphanumeric and any kind of space (newlines too) 

    return str 
} 
+0

Danke! Ich hatte zuvor über den gleichen Code-Chunk gepostet und dies wurde empfohlen. Ich hatte gehofft zu versuchen, Loops zum Üben zu verwenden, ansonsten ist das der richtige Weg! – Megan

Verwandte Themen