【问题标题】:Removing unwanted characters from textbox with JQuery使用 JQuery 从文本框中删除不需要的字符
【发布时间】:2020-01-16 06:27:05
【问题描述】:

我想了解的是如何使用 JQuery 从文本框(或文本区域)中删除某些字符。我有 C# 中的代码,但我似乎无法将其转换为 JQuery javascript。我的问题是我不知道如何从文本框中获取值作为字符数组,然后我可以循环遍历并与给定的一组不需要的字符进行比较。 这就是我在 JQuery 中的“距离”:

$("input[type=text], textarea").change(function() {

   // code here

});

这是我的 C# 代码:

for (int i = 0; i < charArray.Length; i++)
{
    current = charArray[i];
    if ((current == 0x9) ||

        (current == 0xA) ||

        (current == 0xD) ||

        ((current >= 0x20) && (current <= 0xD7FF)) ||

        ((current >= 0xE000) && (current <= 0xFFFD)))
        _validXML.Append(current);
}

return _validXML.ToString().TrimEnd((char)32, (char)160) ;

更新:

我结合了下面的一些答案(我会投票赞成),我的最终 JQuery 看起来像这样并且有效:

$(document).ready(function() {
    $(":text, textarea").change(function() {
        var text = "";
        var arr = $(this).val()
        $.each(arr, function(i) {
            var c = arr.charCodeAt(i);
            if ((c == 0x9) ||
                (c == 0xA) ||
                (c == 0xD) ||
                (c >= 0x20 && c <= 0xD7FF) ||
                (c >= 0xE000 && c <= 0xFFFD)) 
            {
                text += arr.charAt(i);
            }
        });
        $(this).val(text);
    });
});

谢谢大家!

【问题讨论】:

  • 基于此验证 xml?我只能假设这不是 utf-8(每个字符最多可以有 6 个字节)
  • 验证 xml...??我猜你指的是我的 c# 变量 _validXml ......这与我在客户端上尝试做的事情无关。

标签: javascript jquery


【解决方案1】:

这不是正则表达式的情况吗,例如:

$("input[@type='text'], textarea").change(function() {
    this.value = this.value.replace(/[^\w\d]+/gim,"");
});

【讨论】:

  • 您在其中缺少一个空格......但这是最好的解决方案恕我直言。
  • 可能更快等等,但我希望我的代码在这里有意义,所以我不使用正则表达式......至少这次不是,但无论如何谢谢。
【解决方案2】:

文本区域:

<textarea id="item" name="item" rows="5" cols="80">Some text in here</textarea>

jQuery 代码:

var text = $('#item').val();
var newtext = "";
for (var i = 0; i < text.length; i++) {
   var c = text.charCodeAt(i);
   if ((c == 0x9) || (c == 0xA) || (c == 0xD) || 
       (c >= 0x20 && c <= 0xD7FF) ||
       (c >= 0xE000 && c <= 0xFFFD)) {
       newtext += text[i];
   }
}
$('#item').val(newtext);

这实际上与 jQuery 关系不大,我认为,除了访问文本数据并重新设置它。

【讨论】:

  • 尽管这与 JQuery 的关系最小,但这就是解决我的问题的原因。
【解决方案3】:

可以使用charCodeAt()方法结合字符串的length属性循环遍历字符串中的字符。

类似:

$("input[type=text], textarea").change(function() {
  var text = $(this).val()

  for(var i = 0; i < text.length; ++i) {
    var currentChar = text.charCodeAt(i);

    // Do something with it...
});

我的初始版本使用了charAt(),但由于看起来您正在处理 Unicode 代码点,charCodeAt() 更合适。

【讨论】:

    【解决方案4】:

    在输入/文本区域上使用事件观察器(onkeydown / onkeypress / onkeyup),按下键,如果键是不需要的字符,则阻止事件发生。

    $("input[type=text], textarea").observe('keypress', function(e) {
     var keynum; 
     if(window.event)
     {
      keynum = e.keyCode
     }
     else if(e.which)
     {
      keynum = e.which
     }
     if(keynum == '13' || keynum == 'something else' || [...])
     {
      Event.stop(e);
     }
    });
    

    【讨论】:

    • 非常好,但不处理粘贴文本时的情况。
    • 是的,这就是我真正想要验证的内容
    • 对我来说 Event.stop(e) 不起作用。 e.preventDefault() 完成了这项工作。
    【解决方案5】:

    获取textarea的值试试:

    $('input[type=textarea]').change(function(){
       var value = $(this).val(); 
       ...........
    });
    

    要删除不需要的字符,试试这个例子..我从 jquery 文档 (jQuery.grep()) 中复制

    var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];
    $("div").text(arr.join(", "));
    
    arr = jQuery.grep(arr, function(n, i){
      return (n != 5 && i > 4);
    });
    $("p").text(arr.join(", "));
    
    arr = jQuery.grep(arr, function (a) { return a != 9; });
    $("span").text(arr.join(", "));
    

    【讨论】:

      【解决方案6】:

      我更喜欢使用这种类型的 javascript 函数(来自我的阴暗过去)首先阻止字符输入:

      每个输入控件上都有类似的内容: onkeypress='checkKey(this,"a-zA-Z0-9","N","10");'

      函数如下:

         //****************************************************************************
         // Function: checkKey()
         //   Author: Ron Savage
         //     Date: 10-11-2004 
         //    
         // Description: This function tests reg exp syntax.
         //****************************************************************************
         function checkKey(textControl, reExpr, allCaps, maxlen)
          {
            popupMessage.hide();
      
            keyStr = String.fromCharCode(event.keyCode);
            textLength = textControl.value.length;
      
            if (allCaps == 'Y')
               {
               keyStr = keyStr.toUpperCase();
               event.keyCode = keyStr.charCodeAt(0);
               }
      
            if ( reExpr != '' )
               {
              reString = '[^' + reExpr + ']';
               re = new RegExp(reString, 'g');
      
               //alert('RE: ' + reString);
      
               result = keyStr.match(re);
      
               if (result)
                  {
                  beep();
                  event.returnValue = false;
                  showPopupMessage(textControl, result.toString() + ' not allowed!');
                  }
               }
      
            if ( textLength > maxlen )
               {
                  beep();
                  event.returnValue = false;
                  showPopupMessage(textControl, 'Max length [' + maxlen + '] exceeded!');
               }
      
            //alert('Key: ' + keyStr + ' code: ' + event.keyCode);
            }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多