14

まず、これがプロとはかけ離れていることを私は知っています。文字列の操作方法を学ぼうとしています。このアプリが行うことになっているのは、単純なテキスト入力を受け取り、それに対していくつかのことを行うことです。

文字を数え、大文字と小文字を数え、単語を数え、スペースを数えます。これが私がやったことです:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Case Check</title>
    <script type="text/javascript">
        function checkCase(text)
        {   

            var counter = 0;
            var letters = 0;
            var lowercase = 0;
            var uppercase = 0;
            var spaces = 0;
            var words = 0;


            for(; counter < text.length; counter++)
            {
                if(isUpperCase(text.charAt(counter))) {uppercase ++; letters++;}
                if(isLowerCase(text.charAt(counter))) {lowercase ++; letters++;} 
                if((text.charAt(counter) == " ") && (counter < text.length))
                {
                    spaces += 1;
                    words += 1;
                }
                if((text.charAt(counter) == ".") || (text.charAt(text(counter)) == ",")) continue;
            }
            return  [letters, lowercase, uppercase, spaces, words];
        }

        function isUpperCase(character)
        {
            if(character == character.toUpperCase) return true;
            else return false;
        }

        function isLowerCase(character)
        {
            if(character == character.toLowerCase) return true;
            else return false;
        }
    </script>
</head>
<body>
    <script type="text/javascript">
        var typed = prompt("Enter some words.");
        var result = checkCase(typed);
        document.write("Number of letters: " + result[0] + "br /");
        document.write("Number of lowercase letters: " + result[1] + "br /");
        document.write("Number of uppercase letters: " + result[2] + "br /");
        document.write("Number of spaces: " + result[3] + "br /");
        document.write("Number of words: " + result[4] + "br /");
    </script>
</body>

ユーザーの提案により、いくつかの変更を行いました。問題は、「テキスト」を文字列オブジェクトのように扱えないことです。

4

7 に答える 7

23

正規表現を使用します。

var s = "thisIsAstring";
var numUpper = s.length - s.replace(/[A-Z]/g, '').length;  

// numUpper = 2

JavaScript の置換/正規表現で詳細を参照してください

于 2014-04-18T20:12:14.280 に答える
2

isUpperCaseJavaScript 関数ではありisLowerCaseません。

それらを次のようなものに置き換えることができます

var isUpperCase = function(letter) {
    return letter === letter.toUpperCase();
};

var isLowerCase = function(letter) {
    return letter === letter.toLowerCase();
};

コードにチェックが必要な構文エラーが多数ありました。

また、すべての括弧と混同していたので、を使用する代わりにcharAt、配列のように文字列を参照しました。そのため、代わりに、 読みやすいとわかったものtext.charAt(letters) を使用 しました。text[letters]

完全な jsFiddleはこちらを参照してください。jsFiddle では許可されていないため、コードを少し変更しましたdocument.write

于 2013-10-04T01:18:56.190 に答える
2

全体の問題かどうかはわかりませんが、これは悪い括弧です

if(text.charAt(letters)) == " " && text(letters) < text.length)
                       ^

する必要があります

if(text.charAt(letters) == " ") && text(letters) < text.length)
                              ^

そして、実際に私はそれを作るだろう

if((text.charAt(letters) == " ") && (text(letters) < text.length))
于 2013-10-04T00:33:27.627 に答える