代码之家  ›  专栏  ›  技术社区  ›  RSolberg

jquery alphanumericplugin-复制粘贴问题

  •  2
  • RSolberg  · 技术社区  · 16 年前

    我正在使用jquery的.hydrometic插件,这无疑是在用户直接输入文本框时所期望的。但是,如果用户要复制一个值并将其粘贴到文本框中,则所有赌注都将取消。

    $("#<%= txtNumber.ClientID %>").alphanumeric({allow:"-"});
    

    我当然可以这样做:

    $(document).ready(function() {
        $("#<%= txtNumber.ClientID %>").blur(function() {
            $("#<%= txtNumber.ClientID %>").val(
                RemoveInvalidCharacters(
                    $("#<%= txtNumber.ClientID %>").val()
                )
            );
        });
    });
    
    //FUNCTION REMOVES ANY ; IN TEXT TO PREVENT SQL INJECTION
    function RemoveInvalidCharacters(text) {
         return text.replace(';', '');
    }
    

    但是…我不想再使用.blur()函数来拼凑代码了。还有别的办法吗?

    5 回复  |  直到 12 年前
        1
  •  3
  •   Josh Bush    16 年前

    处理粘贴事件相当简单。我在我的 masked input plugin 效果很好。请随意浏览源代码以查看它的使用情况。

    下面是为上面的示例修改的相关位。

    var pasteEventName = $.browser.msie ? 'paste' : 'input';
    $("#<%= txtNumber.ClientID %>").bind(pasteEventName, function() {
       setTimeout(function() { 
          RemoveInvalidCharacters(
             $("#<%= txtNumber.ClientID %>").val()
          ); 
       }, 0);
    });
    
        2
  •  1
  •   RSolberg    15 年前

    我在这里找到了这个解决方案: http://www.devcurry.com/2009/10/allow-only-alphanumeric-characters-in.html

    <script type="text/javascript">
    $(function() {
     $('input.alpha').keyup(function() {
      if (this.value.match(/[^a-zA-Z0-9 ]/g)) {
       this.value = this.value.replace(/[^a-zA-Z0-9 ]/g, '');
      }
     });
    });
    </script>
    
    <input type="text" name="test" value="" class="alpha">
    
        3
  •  1
  •   Brian Gottier    14 年前

    我也需要一个解决粘贴问题的方法,我发现了一些对我有用的方法。用户仍可以在浏览器菜单中使用“编辑”>“粘贴”,但会处理ctrl-v以及右键单击“粘贴”。在FF、IE、Opera、Safari、Chrome中测试:

    <!DOCTYPE html>
    <html>
    <head>
        <title>Only Allow Certain Characters</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    </head>
    <body>
        <br>
        <form id="myform" action="">
            <input id="element1" name="mytext1" type="text">
            <input id="element2" name="mytext2" type="text">
        </form>
    <script>
        /* removes evil chars while typing */
        (function($){
            $.fn.disableChars = function(a) {
    
                a = $.extend({
                    allow: ''
                }, a);
    
                b = a.allow.split('');
                for ( i=0; i<b.length; i++) b[i] = "\\" + b[i];
                a.allow = b.join('');
    
                var regex = new RegExp('[^a-z0-9' + a.allow + ']', 'ig');
    
                $(this)
                .bind('keyup blur', function() {
                    if (this.value.search(regex) != '-1') {
                        this.value = this.value.replace(regex, '');
                    }
                })
                .bind('contextmenu',function () {return false});
    
            }
        })(jQuery);
    
        $("#element1").disableChars();
        $("#element2").disableChars({allow:".,:-() "});
    </script>
    </body>
    </html>
    
        4
  •  0
  •   Ken Browning    16 年前

    复制和粘贴绝对是屏蔽输入的一个挑战。

    您是否考虑过在提交表单时使用“编码”特殊字符,而不是在用户输入值时使用?我们同样允许用户在文本框中输入<和>字符(我们通过JavaScript将它们转换为<和>,然后返回到代码隐藏中的<和>。

        5
  •  0
  •   Ilya Birman    16 年前

    这样就不会阻止SQL注入。我不需要使用你的表格,我可以制作我的表格并将其发布到你的脚本中。更简单:我可以禁用javascript并删除您的数据库。

    相反,检查服务器端的输入有效性。

    最简单的方法是转义它或使用参数化查询。