一个简单的程序,用于查找字符串中不能正常工作的元音数量

时间:2012-10-16 18:32:29

标签: javascript

我正在尝试使用JavaScript,我的浏览器拒绝执行我使用switch case函数编写的程序。目标是找到一个字符串中的元音数量(考虑所有都以小写字母表示)

当我点击“提交”按钮时,框中的文字消失但没有任何反应。 警报“你好”也没有出现,所以我假设该功能甚至没有被执行。

   <html>
   <head>
   <script>
   function vow(form)
    {
     alert("hello");
     var a = new Array(10);
     a = form.t1.value;
     var flag = 0;
     var i;

     for(i=0;i<10;i++)
       {
     switch (a[i])
      {
       case 'a':
       flag++;
       break;

       case 'e':
       flag++;
       break;

       case 'i';
       flag++;
       break;

       case 'o';
       flag++;
       break;

       case 'u';
       flag++;
       break;
      }
      }
  alert(flag);  
  }
  </script>
  </head>

  <body>
  <form>

  <input type="text" name="t1">
  <input type="submit" value="SUBMIT" onClick="vow(this.form)"/>

  </form>
  </body>
  </html>

6 个答案:

答案 0 :(得分:8)

您使用;代替:

case 'i';
      __^__

ou的相同案例。

更新

我还展示了一个(内存密集型)替代版本:

var count = input.match(/[aeiou]/gi).length;

更新

var vow = function(str) {
    var matches = str.match(/[aeiou]/gi);
    var count = matches ? matches.length : 0;
    alert("'" + str + "' contains " + count + " vowel(s)");
    return false;
}​ ​

<input type="submit" value="SUBMIT" onClick="return vow(this.form.t1.value)"/>

You can see it here

答案 1 :(得分:5)

你可以做得更简单..例如从输入中删除元音,并检查与原始字符串相比的长度差异。

var count = input.length - input.replace(/[aeiou]/gi, '').length;

编辑:或者更简单,删除除元音之外的所有内容; - )

function vow(form) {
    alert(form.t1.value.replace(/[^aeiou]/gi, '').length);
}​

答案 2 :(得分:3)

程序的一个小改进版本:

function vow(form) {
    var a = form.t1.value;
        flag = 0;

    for (var i = 0; i < a.length; i++) {
        switch (a[i]) {
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':
                flag++;
                break;
        }
    }
    alert(flag);
}​

http://jsfiddle.net/b36D6/

但是这个任务可以更简单地处理:

function vow(str) {
    return --(str.split(/[aeiou]/).length);
}

所以:vow("hello!") - &gt; 2

答案 3 :(得分:2)

您可以将誓言方法简化为

function vow(form) {
  a = form.t1.value;

  var matches = a.toString().match(/[aeiou]/g);

  if( matches != null){
    alert(matches.length);
  } else {
    alert(0);
  }

}

答案 4 :(得分:1)

您已使用

case 'i'; case 'o'; case 'u';

应该是

case 'i': case 'o': case 'u':

并在函数末尾使用return false,例如

function vow(form)
{

    // code
    return false;
}

并添加return之类的

<input type="submit" value="SUBMIT" onClick="return vow(this.form)"/>

DEMO

答案 5 :(得分:0)

  

[OP]当我点击“提交”按钮时,框中的文字消失但没有任何反应。警告“你好”也没有出现,所以我假设该功能甚至没有被执行。

您需要使用onSubmit事件而不是onClick处理程序,如下所示:

  <input type="submit" value="SUBMIT" onSubmit ="vow(this.form)"/>