1

我正在使用下面的 jquery。

$(document).ready(function () {
    $("#myTextBox").keydown(function () {
        return false;
        (Or when keypress) event.preventDefault();
    });
});

它适用于 IE 6-9、Chrome 中的英文 IME 模式。它停止用户在文本框中输入。但它不适用于 IE 6、7 和 8 中的韩语 IME 模式。但它适用于 IE 9。我没有用日语或中文测试,但我认为它会是一样的。

我需要做的是阻止用户在某些文本框中输入韩语字符。有谁知道为什么会在 IE 6-8 中发生这种情况?

编辑 根据 Fresheyeball 的想法,我得出了这个结果。

var korean = /[\uAC00-\uD7AF\u1100-\u11FF\u3130-\u318F\uA960-\uA97F\uD7B0-\uD7FF\uFFA1-\uFFFF]/g;
var chinese = /[\u4E00-\u62FF\u6300-\u77FF\u7800-\u8CFF\u8D00-\u9FFF]/g;
var japanese = /[\u3040-\u309F\u1B000-\u1B0FF\u30A0-\u30FF\u31F0-\u31FF\u1B000-\u1B0FF]/g;

<!--
// Korean - http://en.wikipedia.org/wiki/Hangul
U+AC00-U+D7AF
U+1100-U+11FF
U+3130-U+318F
U+A960-U+A97F
U+D7B0-U+D7FF
U+FFA1-U+FFFF

// Chinese - http://en.wikipedia.org/wiki/CJK_Unified_Ideographs
U+4E00-U+62FF
U+6300-U+77FF
U+7800-U+8CFF
U+8D00-U+9FFF

// Japanese(hiragana) - http://en.wikipedia.org/wiki/Hiragana
U+3040-U+309F
U+1B000-U+1B0FF

// Japanese(katakana) - http://en.wikipedia.org/wiki/Katakana
U+30A0-U+30FF
U+31F0-U+31FF
U+1B000-U+1B0FF
-->

$("#Text2").val($("#Text1").val().replace(korean, ""));

但是,仍有一些错误需要修复。因为韩文、日文或中文中的一个字符,它不是整个字符。它仍在等待下一个角色命中。字母“A”只是“A”,它已完成输入。但KJC与那些有点不同。我想我可以解决这个问题。再次感谢 Fresheyeball。

4

1 回答 1

0

您还可以创建字符白名单并使用正则表达式进行验证:

  $('#myTextBox').keyup(function(){
      val = $(this).val();
      // use regex to determine if all the characters entered so far are valid
      // and remove invalid ones
      val = val.replace(/[\{rangeStart}-\{rangeStop}]/g, '');
      $(this).val(val);
  });

仅供参考,我对正则表达式不是很好,所以我的语法可能不正确。但从理论上讲,您应该能够使用正则表达式来测试 ascii 集的范围和单个 ascii 字符。

http://www.javascriptkit.com/jsref/regexp.shtml参见 ascii 文字部分

于 2013-03-07T22:42:20.907 回答