0

文字列を引数として取る関数を書いています。次に、文字列が大文字で始まる場合は true を返し、それ以外の場合は false を返します。しかし、私の現在の機能は、1 つの単語と文全体の両方で機能するようにしたい 1 つの単語文字列に対してのみ機能します。これを達成するためにコードを改善するにはどうすればよいですか? 第二に、数字が文の中で渡された場合は機能しません。これどうやってするの?

これが私のコードです

function takeString (str) {
var regex = /^[A-Za-z]+$/;

if (str.match(regex)) {

   if (str.charAt(0) === str.toUpperCase().charAt(0)) {
      alert('true');
      return true;
   } else {
      alert('false');
      return false;
   }

} else {
    alert('Only letters please.');
}
}

takeString('This is'); // shows Only letters please which is wrong. this should work
takeString('String); // returns true which right
takeString('string'); // returns false which is right
takeString('This is 12312321'); // shows only letters please which is right bcoz it has digits
takeString('12312312'); // show Only letters please which is right.

</p>

4

2 に答える 2

3

スペースは文字ではありません。それらを文字セットに追加する必要があります。

> 'This is a string'.match(/^[A-Za-z]+$/);
null
> 'This is a string'.match(/^[A-Za-z\s]+$/);
["This is a string"]

\sはすべての空白に一致するため、タブに一致させたくない場合は\s、スペースに置き換えます。

これは、コードのもう少し凝縮されたバージョンです。

function takeString(str) {
    return str.match(/^[A-Z][A-Za-z ]*$/);
}
于 2012-12-08T05:51:02.053 に答える
0

Blenderによって与えられた正規表現のアドバイスに加えて、次のことも行う必要があります(各単語をチェックする必要性を満たすために...単語がスペースまたはタブで区切られていると仮定します:

  • 分割関数を使用して文字列を単語に分割します(var mywords = str.split(/ \ s + /))
  • splitによって返されたmywords配列を反復処理し、各配列要素を正規表現と照合します
  • 正規表現が一致しない場合はエラーを返します
  • すべての単語に一致する場合は成功を返します

    takeString(str){

    var mywords = str.split(/ \ s + /); for(i = 0; i <mywords.length; i ++){if(str.match(/ ^ [AZ] [A-Za-z] * $ /)!= true){falseを返す; }}trueを返します。}

(誰かが私のjsをチェックする必要があります...)

于 2012-12-08T06:33:42.737 に答える