2016-11-28 5 views
-1

私はJavaScriptコードの演習を解決しようとしています。私のコードは間違っていて、なぜ私は見ることができません。JavaScript - 文字が記号で囲まれているかどうかを確認するにはどうすればよいですか?

タスクは次のとおりです。

は、文字列を取り、文字列内のすべての文字が「+」記号で囲まれている場合は、trueを返し、そうでない場合はfalseを返します。

ほとんどの場合は機能しますが、 '= a +'では機能しません。その理由はわかりません。誰かが説明できますか?

function SimpleSymbols(str) { 

    for (var i = 0; i < str.length; i++) { 

     if (str[0].match(/[a-z]/i) || str[str.length - 1].match(/[a-z]/i)) { 
      return false; 
     } else { 
      if (str[i].match(/[a-z]/i) && (str[i - 1] !== "+" || str[i + 1] !== "+")) { 
       return false; 
      } else { 
       return true; 
      } 
     } 

    } 
} 

SimpleSymbols(readline()); 
+1

ループを完全にスキップして、正規表現を使用して前後にプラス記号が付いていない文字を探すことはできませんでしたか? 'return!/(^ | [^ +])[a-z] | [a-z]([^ +] | $)/ i.test(str);'のようなものです。 – nnnnnn

答えて

1

問題は内部else節です。それは除外されるべきであり、その代わりに関数はforブロックの後にtrueを返すべきです。

function SimpleSymbols(str) { 

    for (var i = 0; i < str.length; i++) { 

     if (str[0].match(/[a-z]/i) || str[str.length - 1].match(/[a-z]/i)) { 
      return false; 
     } else { 
      if (str[i].match(/[a-z]/i) && (str[i - 1] !== "+" || str[i + 1] !== "+")) { 
       return false; 
      } 
     } 

    } 

    return true; 
} 
+0

OPのコードと同様に、最初の反復でループを終了します。 – nnnnnn

+0

ありがとう、@nnnnnn。一定。 – MJH

+0

Cool。 +1。 'str [-1]'と 'str [str.length]'は最初の '' if'''を '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'undefined'です。 – nnnnnn

0

あなたはこの照合し、その結果を返すことができます:

^\+(?:[a-z]\+)*$ 

https://regex101.com/r/1zXUJD/1

は '+' で始まる文字列とし、[AZ]任意の数の+その後に見えます文字列の終わりまで

関連する問題