JavaScript检查错误地允许输入字段中的数字

时间:2013-12-16 22:25:23

标签: javascript

我有一个学校作业,包括检查一个值是否为整数。这是实际的作业说明:

  1. 编写预期和处理预期数字字段错误的JavaScript™代码。此代码在按键上执行,输入的值将在名为enteredChar的变量中保存。包括检查字符不是数字或非字母数字字符所需的JavaScript™语句的try块,或者是否抛出错误消息。
  2. 我的代码如下:

    function numCheck() {
     var enteredChar = document.getElementById('numeric_field').value;
    
     var pattern = new RegExp('/^\d+$/'); // numbers only match
    
     if (pattern.test(enteredChar)) {
         alert("All good!");
     } else {
     try {
             throw new Error("Invalid numerical character(s) given!");
         } catch (e) {
            alert(e);
         }
     }
    

    }

    html如下:

    <form>
    Enter Numeric Value: <input type="text" id="numeric_field" onkeypress="numCheck()">
    </form>
    

    然而,无论我做什么,如果第一个字符不是数字,它可以正常工作,但当第二个字符是数字时,它也会显示此警告对话框。任何帮助,将不胜感激!如果每个字符只是数字,我想检查按下的每个键,如果不是,则显示警告对话框,但如果是,则显示包含“All good!”的警告对话框。我读到onkeyup和onkeydown更适合这个,但由于作业说使用onkeypress我有点不习惯使用它。

2 个答案:

答案 0 :(得分:2)

通过使用正则表达式,你需要做的事情要困难得多。在这种情况下,它更简单(假设您只需要知道它是否是数字,而不是字母和数字的某种组合)来使用isNan

function numCheck() {
 var enteredChar = document.getElementById('numeric_field').value;

 if (!isNaN(enteredChar)) {
     alert("All good!");
 } else {
 try {
         throw new Error("Invalid numerical character(s) given!");
     } catch (e) {
        alert(e);
     }
 }

}

答案 1 :(得分:1)

isNaN是一个很好的解决方案!

但是为了纠正您当前的代码,这是我的提示:

  • 您的模式不正确:var pattern = new RegExp('^\\d+$');是。
  • 使用onkeyup代替,因为您使用onkeypress获得旧值。