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

スペースは文字コード32(16進数の20)であるため、最初のifステートメントの前にこの行を追加するだけです。

if (charCode == 32) return true;

その後に元のifステートメントが続きます。(スペースが検出されるとすぐに関数が停止してtrueを返すため、これらの間に追加のelseステートメントは必要ありません。)

更新:元の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 に答える