web-dev-qa-db-ja.com

Javascriptエラー:「val.matchは関数ではありません」

正規表現に一致関数を使用しました。

私が使用するコードは

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

しかし、javascriptエラーは

"val.match is not function"

私は問題が何であるかを見つけることができません、

前もって感謝します

31
zahir

Valは文字列ではないと言うでしょう。

次に対して「val.match is not function」エラーが表示されます

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

文字列String(val)に明示的に変換すると、エラーはなくなります

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

また、文字列を使用する場合、変換を行う必要はありません

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

問題は次のとおりです。valは文字列ではありません

私は2つのオプションを考えることができます1)文字列に変換する:valが文字列でなければならないことが確かな場合は良いオプションかもしれません

「上記の答えと同じ」

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

2)行をスキップする:私の場合は、val型をチェックして、文字列でない場合はスキップする方が良いでしょう。とにかく「match」関数を実行するのは得策ではなかったからです。

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

注:上記の私のコメントから示唆されたように、これを答えにします。

Valが定義され、Stringであることを確実に確認してください。また、正規表現の 's'の前にスラッシュがないというタイプミスだと思います。その場合、ifテストを「if(val.match(/ ^\s * $)」に置き換えることができます。

3
Eric Wendelin