2017-01-12 1 views
1

Soumis plus tôt à ce sujet, toutes les pièces fonctionnent à ce stade séparément, mais pas ensemble. J'ai essayé de faire bouger les choses pour voir s'il s'agissait simplement d'un problème de commande, mais cela ne l'a pas réglé. Essayer de les mettre dans un grand si/sinon ne semblait pas fonctionner. Je peux soit obtenir la chaîne pour afficher seulement les caractères alphanumériques OU afficher 'pas une chaîne', mais je ne peux pas obtenir le code pour faire les deux. Cette section renverra les caractères alphanumériques appropriés seulement: « pas une chaîne »Retour Alphanumériques -en combinant des éléments de la fonction

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]#$#") 

Cela retour, même si elle doit montrer des caractères alphanumériques, mais est correcte ou en apparence si pour les nombres et « »

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) 

Qu'est-ce que je fais mal? -Merci d'avance!

+0

Le premier extrait a un retour au milieu de la fonction, les autres lignes ne seront pas exécutées – edc65

+0

Que faites-vous essayer de faire? Même si vous avez soumis plus tôt, comment pouvons-nous le savoir? – edc65

+0

Votre second extrait renvoie correctement "pas une chaîne" lorsque vous appelez la fonction avec un argument numérique (23). Un nombre n'est pas une chaîne. – edc65

Répondre

1

Edit: D'accord, en fonction de votre commentaire, vous allez ici:

Ceci est votre problème:

if (typeof str !== String) 

Vous comparez le résultat de typeof str, qui est une chaîne, avec le object constructor pour les chaînes, String, qui est une fonction. Il échoue parce que vous ne vérifiez pas réellement une chaîne, vous comparez une chaîne (la sortie de typeof, qui est toujours une chaîne quel que soit le type que vous vérifiez) avec une fonction. Votre comparaison devrait plutôt ressembler à ceci:

if (typeof str !== 'string') 

Edit: Heres un JSFiddle.

+0

Mes applis! Il doit retourner "pas une chaîne" lorsque des nombres (ou tout ce qui n'est pas une chaîne est passé) -il ne doit pas convertir des nombres en une chaîne. – Megan

+0

J'ai adressé deux erreurs que vous avez faites, le correctif pour le second aurait résolu cela pour vous. J'ai édité ma réponse pour enlever la référence au premier. – chrBrd

0

Pour prendre toute sorte d'argument, la conversion en chaîne et ne conserver que des caractères alphanumériques:

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

Merci! J'avais posté précédemment sur le même morceau de code et cela a été recommandé. J'espérais essayer d'utiliser des boucles pour m'entraîner autrement sinon c'est totalement le chemin à parcourir! – Megan