首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript onKeypress验证

JavaScript onKeypress验证
EN

Code Review用户
提问于 2014-08-11 10:24:23
回答 2查看 24.5K关注 0票数 5

这是一个用于JavaScript验证的函数:

代码语言:javascript
复制
var alpha = "[ A-Za-z]";
var numeric = "[0-9]"; 
var alphanumeric = "[ A-Za-z0-9]"; 

function onKeyValidate(e,charVal){
    var keynum;
    var keyChars = /[\x00\x08]/;
    var validChars = new RegExp(charVal);
    if(window.event)
    {
        keynum = e.keyCode;
    }
    else if(e.which)
    {
        keynum = e.which;
    }
    var keychar = String.fromCharCode(keynum);
    if (!validChars.test(keychar) && !keyChars.test(keychar))   {
        return false
    } else{
        return keychar;
    }
}

和HTML代码:

代码语言:javascript
复制
<input type="text"  name="shipname"  onkeypress="return onKeyValidate(event,alpha);"/>
<input type="text"  name="price"   onkeypress="return onKeyValidate(event,numeric);" />

我想知道关于代码质量,创造问题或任何替代这一点。我需要一些专家的建议。

EN

回答 2

Code Review用户

回答已采纳

发布于 2014-08-11 16:12:35

  • onKeyValidate是一个好名字,但更好的名称可能是validateKeypress
  • 将RegExp存储为字符串,然后每次构造它,这似乎很愚蠢。为什么不直接声明var alpha = /[ A-Za-z]/呢?
  • keyChars似乎是针对\x00 (空字符)和\x08 (后退字符)进行检查的。这两种方法都不能传递给onKeypress,所以您可以直接取出它。
  • 获得字符代码的标准方法是event.which || event.keyCode
  • event是一个全球性的;我不认为你需要传递它。

这里有一个拟议的重写:

代码语言:javascript
复制
var alpha = /[ A-Za-z]/;
var numeric = /[0-9]/; 
var alphanumeric = /[ A-Za-z0-9]/;

function validateKeypress(validChars) {
    var keyChar = String.fromCharCode(event.which || event.keyCode);
    return validChars.test(keyChar) ? keyChar : false;
}

HTML必须更改为onkeypress="validateKeypress(alpha);"

票数 6
EN

Code Review用户

发布于 2014-08-11 16:12:15

我能挑出的东西,更多的是一种挑剔的东西,那就是你应该把你最后的if语句转过来

代码语言:javascript
复制
if (!validChars.test(keychar) && !keyChars.test(keychar))   {
    return false
} else{
    return keychar;
}

应该是这样的

代码语言:javascript
复制
if (validChars.test(keychar) && keyChars.test(keychar)) {
    return keychar;
} else {
    return false;
}

先做积极的事。大多数人更喜欢这个,而不是所有的负面。

备注:对于代码高尔夫,你只是刮了2个字符,以及使它更符合标准,如果这个挑剔可以被认为是一个标准。

短版

如果您知道三元操作符,并且希望使用它们而不是这个简单的If语句,@renatargh提到您可以使这个超短

代码语言:javascript
复制
return validChars.test(keychar) && keyChars.test(keychar) ? keychar : false;

而且,var alphanumeric = "[ A-Za-z0-9]";从来不被使用(在这个代码块中),var keyChars = /[\x00\x08]/;也不使用

你应该把他们赶走

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/59690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档