Frage

Ich bin die .alphanumeric Plugin für jQuery welche tut, ist sicher, was ich erwarten würde, da die Benutzer direkt in das Textfeld eingeben. Aber, wenn ein Benutzer einen Wert in das Textfeld kopieren und einfügen waren, sind alle Wetten ab.

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

Ich kann dies sicherlich tun:

$(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(';', '');
}

Aber ... ich hätte lieber nicht zu Kluges meinen Code noch weiter mit .blur () Funktionen auf. Gibt es noch andere Möglichkeiten, um das?

War es hilfreich?

Lösung

die Paste Event-Handling ist recht unkompliziert. Ich verwende diese Technik in meiner maskierte Input Plugins mit guten Ergebnissen. Fühlen Sie sich frei, um die Quelle zu suchen es in Gebrauch zu sehen.

Hier ist die relevanten Bits für Ihr Beispiel modifizierte oben.

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

Andere Tipps

Ich fand diese Lösung hier: http://www.devcurry.com/2009/ 10 / allow-only-alphanumerische-Zeichen-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">

Auch ich wurde eine Lösung für das Problem Paste benötigen, und ich herausgefunden etwas, das für mich arbeiten. Eine Person kann immer noch das Bearbeiten> Einfügen im Browser-Menü verwenden, aber Strg-V, sowie die rechte Maustaste Paste behandelt. Getestet in 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>

Copy and Paste is definitely a challenge for masked inputs.

Have you considered "encoding" special characters when the form is submitted as opposed to when the user enters values? We do the same thing to allow users to enter the < and > characters in TextBoxes (we convert them to &lt; and &gt; via javascript and then back in to < and > in the code behind.

This way you will not prevent an SQL injection. I’m not required to use your form, I can make mine and POST it to your script. Even easier: I can disable javascript and go drop your database.

Instead, check the input validity on server side.

The easiest ways are escaping it or using parametrised queries.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top