当前位置:编程学习 > C#/ASP.NET >>

javascript求和验证问题

<!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>范例6-1</title>
</head>
<body>
<script language="javascript">
    function Sum( arg1, arg2 )              // 数值加法函数
    {
        var sarg1 = new String(arg1);       // 将传入的参数转为字符串以便进行参数检查
        var sarg2 = new String(arg2);       
        if( (sarg1=="") || (sarg2=="") )    // 确保参数不为空
        {
            var e0 = new Error();           // 当有参数为空则抛出异常
            e0.Serial = 1000001;             
            if( sarg1=="" )                 // 根据为空的参数正确填写错误信息
            {
                e0.message = "Sum函数参数非法:第1个参数为空!";
            }
            else
            {
                e0.message = "Sum函数参数非法:第2个参数为空!";
            }
            throw e0;                       // 抛出错误信息
        }
        for( i = 0; i<sarg1.length; i++ )   // 参数合法性检查
        {
            for( j=0; j<10; j++ )           // 检查所有字符
            {
                if( sarg1.charAt(i)==j )    // 若不是数字则抛出错误信息
                {
                    break;
                }
                else
                {
                    if( j == 9 )
                    {
                        var e1 = new Error();   // 错误信息
                        e1.Serial = 1000001;
                        e1.message = "Sum函数参数:"+sarg1+"是非法数字!";
                        throw e1;
                    }
                }
            }
        }
        for( k = 0; k<sarg2.length; k++ )   // 检查参数2是数字
        {
            for( l=0; l<10; l++ )
            {
                if( sarg2.charAt(k)==l )
                {
                    break;
                }
                else
                {
                    if( l == 9 )            // 只有包含非数学则抛出错误信息
                    {
                        var e2 = new Error();
                        e2.Serial = 1000001;
                        e2.message = "Sum函数参数:"+sarg2+"是非法数字!";
                        throw e2;
                    }
                }
            }
        }
        return Number(arg1) + Number(arg2);// 参数都正确则返回两个值的和
    }    
function Button1_onclick()                 // “计算”按钮的单击事件处理程序
{
    try                                    // 提取用户输入的数据
    {
        var Text1 = document.getElementById( "Text1" );
        var Text2 = document.getElementById( "Text2" );
        var Text3 = document.getElementById( "Text3" );
        var sum = Sum( Text1.value, Text2.value );  // 调用函数进行计算
        Text3.value = sum;                 // 输出计算结果
    }
    catch( e )                             // 有错误发生则输出错误信息
    {
        alert( e.message );
        if( e.serial == 1000001 )
        {
            alert( e.message );
            e = null;                      // 断开错误对象的引用
        }
    }
}
</script>
<!--用户界面,包括三个文本框,一个按钮-->
    <input id="Text1" type="text" style="width: 84px" maxlength="20" />
    + <input id="Text2" type="text" style="width: 75px" maxlength="20" />
    = <input id="Text3" type="text" style="width: 69px" />
    <input id="Button1" type="button" value="计算" onclick="return Button1_onclick()" />
</body>
</html>
请高手指点,验证问题  
 for( i = 0; i<sarg1.length; i++ )   // 参数合法性检查
        {
            for( j=0; j<10; j++ )           // 检查所有字符
            {
                if( sarg1.charAt(i)==j )    // 若不是数字则抛出错误信息
                {
                    break;
                }
                else
                {
                    if( j == 9 )
                    {
                        var e1 = new Error();   // 错误信息
                        e1.Serial = 1000001;
                        e1.message = "Sum函数参数:"+sarg1+"是非法数字!";
                        throw e1;
                    }
                }
            }
        }
这段代码什么意思?i我知道是字符,但是j不明白。是数字?但是怎么j==9也抛出异常? --------------------编程问答-------------------- 这应该是判断字符串为数字字符串,即字符串中仅仅包含数字

很明显,它验证的方式是取字符串的每一个字符,然后判断该字符是否在0-9之间,也就是j,因为数字本身就应该在0-9。本意应该是循环到9了还没有匹配上,肯定就不是数字了,抛出异常。 --------------------编程问答-------------------- 还有更好的解释吗? --------------------编程问答--------------------

 for( i = 0; i<sarg1.length; i++ ) // 参数合法性检查
  {
  for( j=0; j<10; j++ ) // 检查所有字符
  {
  if( sarg1.charAt(i)==j ) // 若不是数字则抛出错误信息
  {
  break;
  }
  else
  {
  if( j == 9 )
  {
  var e1 = new Error(); // 错误信息
  e1.Serial = 1000001;
  e1.message = "Sum函数参数:"+sarg1+"是非法数字!";
  throw e1;
  }
  }
  }
  }


这段意思是依次比较参数sarg1中每一个字符是不是等于0-9,如果属于0-9之间就break再比较下一个字符直到全比较完为止,j==9是因为这个字符不属于0-9之间的任何一个当然要抛出异常了 --------------------编程问答-------------------- 他那个Sum中判断一个参数是否是数字太麻烦,太啰索,太贱了。把Sum改为如下即可:
  function Sum(){
  //判断参数是否合法
 for (var i = 0; i < arguments.length; i++) {
    if (arguments[i] == "" || isNaN(arguments[i])) 
     return new Error("第" + (i + 1) + "个参数不是字");
  }

     //求和
          var _sum = 0;
          for (var i = 0; i < arguments.length; i++) {
              _sum += arguments[i];
          }
          return _sum;
}

调用方式以下均可: 
Sum(1);  //结果为 1
Sum(1,2); //结果为3
Sum(1,2,3);//结果为6
Sum(1,"",3)//抛出异常:第2个参数不是数字
Sum(1,2,"34a")//抛出异常:第3个参数不是数字
原理:
1.使用函数体内部数组变量arguments取其实参
2.判断每个实参以是否都为数字,如有一个不是数字,则抛出异常,并退出
3.把每个实参相加,并返回求和结果。 --------------------编程问答-------------------- 上面写错了一句:
return new Error("第" + (i + 1) + "个参数不是字");
改成
throw new Error("第" + (i + 1) + "个参数不是数字");
 
  --------------------编程问答--------------------
<!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>范例6-1</title>
</head>

<body>
    <script type="text/javascript">
        function Sum(arg1, arg2) // 数值加法函数
        {
            if (arg1 == "")
                getError("Sum函数参数非法:第1个参数为空!");

            if (arg2 == "")
                getError("Sum函数参数非法:第2个参数为空!");

            if (!isDigit(arg1))
                getError("Sum函数参数:" + arg1 + "是非法数字!");

            if (!isDigit(arg2))
                getError("Sum函数参数:" + arg2 + "是非法数字!");

            return Number(arg1) + Number(arg2);
        }

        function Button1_onclick() {
            try {
                $("Text3").value = Sum($("Text1").value, $("Text2").value);
            }
            catch (e) {
                alert(e.message);
                if (e.serial == 1000001)
                    e = null;
            }
        }

        function $(id) {
            return document.getElementById(id);
        }

        function isDigit(s) {
            var patrn = /^[0-9]{1,20}$/;

            return patrn.exec(s);
        }

        function getError(msg) {
            var err = new Error();

            err.Serial = 1000001;
            err.message = msg;

            throw err;
        }
    </script>

    <input id="Text1" type="text" style="width: 84px" maxlength="20" />+
    <input id="Text2" type="text" style="width: 75px" maxlength="20" />=
    <input id="Text3" type="text" style="width: 69px" />
    <input id="Button1" type="button" value="计算" onclick="return Button1_onclick()" />
</body>
</html>
--------------------编程问答-------------------- 正则表达式
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,