这是一个用于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代码:
<input type="text" name="shipname" onkeypress="return onKeyValidate(event,alpha);"/>
<input type="text" name="price" onkeypress="return onKeyValidate(event,numeric);" />我想知道关于代码质量,创造问题或任何替代这一点。我需要一些专家的建议。
发布于 2014-08-11 16:12:35
onKeyValidate是一个好名字,但更好的名称可能是validateKeypress。var alpha = /[ A-Za-z]/呢?keyChars似乎是针对\x00 (空字符)和\x08 (后退字符)进行检查的。这两种方法都不能传递给onKeypress,所以您可以直接取出它。event.which || event.keyCode。event是一个全球性的;我不认为你需要传递它。这里有一个拟议的重写:
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);"。
发布于 2014-08-11 16:12:15
我能挑出的东西,更多的是一种挑剔的东西,那就是你应该把你最后的if语句转过来
if (!validChars.test(keychar) && !keyChars.test(keychar)) {
return false
} else{
return keychar;
}应该是这样的
if (validChars.test(keychar) && keyChars.test(keychar)) {
return keychar;
} else {
return false;
}先做积极的事。大多数人更喜欢这个,而不是所有的负面。
备注:对于代码高尔夫,你只是刮了2个字符,以及使它更符合标准,如果这个挑剔可以被认为是一个标准。
如果您知道三元操作符,并且希望使用它们而不是这个简单的If语句,@renatargh提到您可以使这个超短
return validChars.test(keychar) && keyChars.test(keychar) ? keychar : false;而且,var alphanumeric = "[ A-Za-z0-9]";从来不被使用(在这个代码块中),var keyChars = /[\x00\x08]/;也不使用
你应该把他们赶走
https://codereview.stackexchange.com/questions/59690
复制相似问题