2013-10-04 63 views
4

counFirst off我知道這遠離專業。我正在嘗試學習如何使用字符串。 這個應用程序應該做的是採取簡單的文本輸入,並做幾件事情:計算字符串中的大寫和小寫字符

計數字母,計數大小寫字母,計數字和計數空格。這裏是我做了什麼:

<!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> 

幾次由於用戶建議的更改。現在的問題是它不會讓我像字符串對象那樣對待'文本'。

+0

檢查您的控制檯。你的函數中有一些語法錯誤,導致它不能被定義。 – Schleis

+0

charAt(text(letters))==「,」「看起來像一個錯字 – Beanz

+0

顯然,我正在使用isUpperCase,如果它是一個正確的方法 – James

回答

0

在這一個

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

如果整個問題不知道,但糟糕的括號應該是

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

而實際上我會讓它

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

我會嘗試,並且我還添加了'counter',所以它現在是text(counter) ..小邏輯問題,我發現,可能導致大問題 – James

+0

你的圓括號的想法擺脫了所有的語法錯誤 - 謝謝!但仍然在checkCase(鍵入)上得到Reference錯誤。 – James

+0

看着,沒有看到任何明顯的我的眼睛。關於可能導致它未定義的語法錯誤的初始問題的評論是正確的(在那裏被燒燬)。另外,還可以嘗試一下,但可能會嘗試:(a)將其他腳本移動到HTML主體中進行測試;(b)註釋掉所有代碼,然後定義它,然後逐個引入代碼直到它變得不確定。 – asantaballa

0

isUpperCaseisLowerCase是而不是JavaScript功能。

你可以用的東西代替它們像

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

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

有很多在你的代碼,你需要檢查的語法錯誤。

我也對所有的括號感到困惑,所以我沒有使用charAt,而是像數組一樣引用字符串。所以,而不是 text.charAt(letters) 我用 text[letters] ,我發現更容易閱讀。

查看完整的jsFiddle here。我稍微修改了你的代碼,因爲jsFiddle不允許document.write

+0

'text'也是一個JavaScript保留字,所以你不應該命名你的變量。 http://www.javascripter.net/faq/reserved.htm – jasonscript

7

使用正則表達式。

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

// numUpper = 2 

含硒較多的JavaScript replace/regex

1

您可以使用匹配()和正則表達式。

var str = "aBcD"; 
var numUpper = (str.match(/[A-Z]/g) || []).length; // 2 
相關問題