web-dev-qa-db-fra.com

Erreur Javascript: "val.match n'est pas une fonction"

J'ai utilisé la fonction de correspondance pour l'expression régulière.

le code que j'utilise est

if(val.match(/^s+$/) || val == "" )

mais les erreurs javascript avec

"val.match is not function"

Je ne peux pas trouver quel est le problème,

merci d'avance

31
zahir

Je dirais que val n'est pas une chaîne.

J'obtiens l'erreur "val.match is not function" pour ce qui suit

var val=12; 
if(val.match(/^s+$/) || val == ""){
   document.write("success: " + val);
}

L'erreur disparaît si vous convertissez explicitement en une chaîne String (val)

var val=12; 
if(String(val).match(/^s+$/) || val == ""){
   document.write("success: " + val);
}

Et si vous utilisez une chaîne, vous n'avez pas besoin de faire la conversion

var val="sss"; 
if(val.match(/^s+$/) || val == ""){
   document.write("success: " + val);
}
41
chrisp7575

le problème est: val n'est pas une chaîne

je peux penser à deux options 1) convertir en chaîne: pourrait être une bonne option si vous êtes sûr que val doit être une chaîne

"Identique à la réponse ci-dessus"

var val=12; 
if(String(val).match(/^s+$/) || val == ""){
   document.write("success: " + val);
}

2) sautez la ligne: dans mon cas, il était préférable de simplement vérifier le type de val et de sauter s'il ne s'agit pas d'une chaîne, car ce n'était pas une bonne idée d'exécuter la fonction "match" de toute façon.

val = 12;
if( val.match) {
  if(val.match(/^s+$/) || val == "" ) {
    document.write("success: " + val);
  }
} else {
    document.write("not a string: " + val);
}
14
skipper

REMARQUE: ce qui en fait une réponse comme suggéré ci-dessus de mon commentaire.

Assurez-vous que val est défini et une chaîne. En outre, je suppose que c'est une faute de frappe que vous n'avez pas de barre oblique avant le "s" dans votre expression régulière. Si tel est le cas, vous pouvez remplacer votre test if par "if (val.match (/ ^\s * $)"

3
Eric Wendelin