2

我有这个功能,仅当用户在文本框中输入内容时才用于验证字母。我刚刚意识到它不接受空格。我将如何解决这个问题?只需将 charCode 值添加到等式中?

function isLetter2(evt) {
       evt = (evt) ? evt : event;
       var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode :
          ((evt.which) ? evt.which : 0));
       if (charCode > 31 && (charCode < 65 || charCode > 90) &&
          (charCode < 97 || charCode > 122)) {
          return false;
       }
       return true;
     }
4

1 回答 1

3

一个空格是 charcode 32(十六进制 20),所以只需在你的第一个 if 语句之前添加这一行。

if (charCode == 32) return true;

后面是你原来的 if 语句。(它们之间不需要额外的 else 语句,因为该函数现在将停止并在检测到空格后立即返回 true。)

更新:您的原始 if 语句可以通过德摩根定律简化为 <= 31 或(包括在 65 和 90 之间)或(包括在 97 和 122 之间)。因此,只需将您的第一个 > 31 更改为 > 32 也可以正常工作,因为它的否定将是 <= 32 并导致返回 true,从而允许输入空格。但我不确定你为什么要允许输入小于 32 的所有其他字符……这包括很多奇怪的东西。也许你应该改变你的代码是这样的:

if (charCode == 32 ||
   (charCode >= 65 && charCode <= 90) ||
   (charCode >= 97 && charCode <= 122))
     return true;
else return false;

事实上,所有这些比较的结果本身等于值 true 或值 false,因此您可以完全消除 if/else 语句,只需说:

return charCode == 32 || (charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122);
于 2013-03-25T21:15:11.407 回答