Frage

Wie blockiere ich Sonderzeichen mit Jquery in ein Eingabefeld eingegeben werden?

Keine korrekte Lösung

Andere Tipps

Ein einfaches Beispiel eines regulären Ausdruck mit denen Sie ändern könnten / nicht zulassen, was Sie wollen.

$('input').on('keypress', function (event) {
    var regex = new RegExp("^[a-zA-Z0-9]+$");
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
    if (!regex.test(key)) {
       event.preventDefault();
       return false;
    }
});

Ich war auf der Suche nach einer Antwort, die Eingabe in nur alphanumerischen Zeichen beschränkt, aber immer noch für die Verwendung von Steuerzeichen erlaubt (zum Beispiel Backspace, löschen, Reiter) und Kopie + Paste. Keine der Antworten, die ich versucht alle diese Anforderungen erfüllt, so kam ich mit den folgenden mit dem input Ereignis auf.

$('input').on('input', function() {
  $(this).val($(this).val().replace(/[^a-z0-9]/gi, ''));
});

Bearbeiten
Wie rinogo wies in den Kommentaren aus der obigen Codeausschnitt um den Cursor an das Ende des Eingangs zwingt, wenn sie in der Mitte des Eingabetext eingeben. Ich glaube, der Code-Snippet unten dieses Problem löst.

$('input').on('input', function() {
  var c = this.selectionStart,
      r = /[^a-z0-9]/gi,
      v = $(this).val();
  if(r.test(v)) {
    $(this).val(v.replace(r, ''));
    c--;
  }
  this.setSelectionRange(c, c);
});

Kurze Antwort: verhindert, dass das 'keypress' Ereignis:

$("input").keypress(function(e){
    var charCode = !e.charCode ? e.which : e.charCode;

    if(/* Test for special character */ )
        e.preventDefault();
})

Lange Antwort: Verwenden Sie ein Plugin wie jquery.alphanum

Es gibt mehrere Dinge zu beachten, wenn eine Lösung Kommissionierung:

  • Pasted Text
  • Steuerzeichen wie Backspace oder F5 kann durch den obigen Code verhindert werden.
  • é, í, ä usw.
  • Arabisch oder Chinesisch ...
  • Cross-Browser-Kompatibilität

Ich denke, dass dieser Bereich komplex genug ist, eine 3rd-Party-Plugin zu rechtfertigen verwenden. Ich habe versucht, einige der verfügbaren Plugins heraus gefunden, aber einige Probleme mit jedem von ihnen so ging ich weiter und schrieb jquery.alphanum . Der Code sieht wie folgt aus:

$("input").alphanum();

Während für eine feinkörnige Steuerung, fügen Sie einige Einstellungen:

$("#username").alphanum({
    allow      : "€$£",
    disallow   : "xyz",
    allowUpper : false
});

Hoffe, es hilft.

Mit HTML5 des Mustereingabe Attribute!

<input type="text" pattern="^[a-zA-Z0-9]+$" />

Werfen Sie einen Blick auf die jQuery-Plugin alphanumerische. https://github.com/KevinSheedy/jquery.alphanum

//All of these are from their demo page
//only numbers and alpha characters
$('.sample1').alphanumeric();
//only numeric
$('.sample4').numeric();
//only numeric and the .
$('.sample5').numeric({allow:"."});
//all alphanumeric except the . 1 and a
$('.sample6').alphanumeric({ichars:'.1a'});

Regex verwenden, um etwas zulassen / nicht zulassen. Auch für eine etwas robustere Version als die akzeptierte Antwort, Zeichen ermöglicht, die einen Schlüsselwert nicht mit ihnen (Backspace, Tab, Pfeiltasten, löschen, etc.) zugeordnet sein kann, indem man zuerst die durch den Tastendruck-Ereignis durchgeführt werden und überprüfen Sie die Taste basierend auf keycode statt Wert.

$('#input').bind('keydown', function (event) {
        switch (event.keyCode) {
            case 8:  // Backspace
            case 9:  // Tab
            case 13: // Enter
            case 37: // Left
            case 38: // Up
            case 39: // Right
            case 40: // Down
            break;
            default:
            var regex = new RegExp("^[a-zA-Z0-9.,/ $@()]+$");
            var key = event.key;
            if (!regex.test(key)) {
                event.preventDefault();
                return false;
            }
            break;
        }
});

Ihre Textbox:

<input type="text" id="name">

Ihr javascript:

$("#name").keypress(function(event) {
    var character = String.fromCharCode(event.keyCode);
    return isValid(character);     
});

function isValid(str) {
    return !/[~`!@#$%\^&*()+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str);
}

einig Javascript-Code auf onkeypress Ereignisse von Textbox schreiben. je nach Anforderung lassen und Zeichen in Ihrem Text beschränkt

function isNumberKeyWithStar(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 42)
        return false;
    return true;
}
function isNumberKey(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
    return true;
}
function isNumberKeyForAmount(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 46)
        return false;
    return true;
}

Ich benutze diesen Code zu ändern andere, die ich sah. Nur grand den Benutzer schreiben, wenn die Taste gedrückt oder eingefügter Text den Mustertest (Spiel) passiert (in diesem Beispiel ist eine Texteingabe, die nur 8 Ziffern erlaubt)

$("input").on("keypress paste", function(e){
    var c = this.selectionStart, v = $(this).val();
    if (e.type == "keypress")
        var key = String.fromCharCode(!e.charCode ? e.which : e.charCode)
    else
        var key = e.originalEvent.clipboardData.getData('Text')
    var val = v.substr(0, c) + key + v.substr(c, v.length)
    if (!val.match(/\d{0,8}/) || val.match(/\d{0,8}/).toString() != val) {
        e.preventDefault()
        return false
    }
})

Dies ist ein Beispiel, das den Benutzer von der Eingabe des Buchstaben „a“

verhindern
$(function() {
$('input:text').keydown(function(e) {
if(e.keyCode==65)
    return false;

});
});

Tastencodes refrence hier:
http://www.expandinghead.net/keycode.html

Ja, Sie können tun mit jQuery wie:

<script>
$(document).ready(function()
{
    $("#username").blur(function()
    {
        //remove all the class add the messagebox classes and start fading
        $("#msgbox").removeClass().addClass('messagebox').text('Checking...').fadeIn("slow");
        //check the username exists or not from ajax
        $.post("user_availability.php",{ user_name:$(this).val() } ,function(data)
        {
          if(data=='empty') // if username is empty
          {
            $("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
            { 
              //add message and change the class of the box and start fading
              $(this).html('Empty user id is not allowed').addClass('messageboxerror').fadeTo(900,1);
            });
          }
          else if(data=='invalid') // if special characters used in username
          {
            $("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
            { 
              //add message and change the class of the box and start fading
              $(this).html('Sorry, only letters (a-z), numbers (0-9), and periods (.) are allowed.').addClass('messageboxerror').fadeTo(900,1);
            });
          }
          else if(data=='no') // if username not avaiable
          {
            $("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
            { 
              //add message and change the class of the box and start fading
              $(this).html('User id already exists').addClass('messageboxerror').fadeTo(900,1);
            });     
          }
          else
          {
            $("#msgbox").fadeTo(200,0.1,function()  //start fading the messagebox
            { 
              //add message and change the class of the box and start fading
              $(this).html('User id available to register').addClass('messageboxok').fadeTo(900,1); 
            });
          }

        });

    });
});
</script>
<input type="text" id="username" name="username"/><span id="msgbox" style="display:none"></span>

und Skript für Ihre user_availability.php sind:

<?php
include'includes/config.php';

//value got from the get method
$user_name = trim($_POST['user_name']);

if($user_name == ''){
    echo "empty";
}elseif(preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/', $user_name)){
    echo "invalid";
}else{
    $select = mysql_query("SELECT user_id FROM staff");

    $i=0;
    //this varible contains the array of existing users
    while($fetch = mysql_fetch_array($select)){
        $existing_users[$i] = $fetch['user_id'];
        $i++;
    }

    //checking weather user exists or not in $existing_users array
    if (in_array($user_name, $existing_users))
    {
        //user name is not availble
        echo "no";
    } 
    else
    {
        //user name is available
        echo "yes";
    }
}
?>

Ich habe versucht, für / und \ , aber nicht gelungen, hinzuzufügen.


Sie können auch tun es, indem Sie Javascript & Code wird sein:

<!-- Check special characters in username start -->
<script language="javascript" type="text/javascript">
function check(e) {
    var keynum
    var keychar
    var numcheck
    // For Internet Explorer
    if (window.event) {
        keynum = e.keyCode;
    }
    // For Netscape/Firefox/Opera
    else if (e.which) {
        keynum = e.which;
    }
    keychar = String.fromCharCode(keynum);
    //List of special characters you want to restrict
    if (keychar == "'" || keychar == "`" || keychar =="!" || keychar =="@" || keychar =="#" || keychar =="$" || keychar =="%" || keychar =="^" || keychar =="&" || keychar =="*" || keychar =="(" || keychar ==")" || keychar =="-" || keychar =="_" || keychar =="+" || keychar =="=" || keychar =="/" || keychar =="~" || keychar =="<" || keychar ==">" || keychar =="," || keychar ==";" || keychar ==":" || keychar =="|" || keychar =="?" || keychar =="{" || keychar =="}" || keychar =="[" || keychar =="]" || keychar =="¬" || keychar =="£" || keychar =='"' || keychar =="\\") {
        return false;
    } else {
        return true;
    }
}
</script>
<!-- Check special characters in username end -->

<!-- in your form -->
    User id : <input type="text" id="txtname" name="txtname" onkeypress="return check(event)"/>

nur die Zahlen:

  

$ ( 'input.time'). Keydown (function (e) {if (e.keyCode> = 48 &&   e.keyCode <= 57) {       return true; } Else {       falsch zurückgeben; }});

oder Zeit mit ":"

  

$ ( 'input.time'). Keydown (function (e) {if (e.keyCode> = 48 &&   e.keyCode <= 58) {       return true; } Else {       falsch zurückgeben; }});

einschließlich auch löschen und Backspace:

  

$ ( 'input.time'). Keydown (function (e) {if ((e.keyCode> = 46 &&   e.keyCode <= 58) || e.keyCode == 8) {return true; } Else {             falsch zurückgeben; }});

unfortuneatly bekommt es nicht auf einem iMAC arbeiten

Wollte auf Alex 'Kommentar zu Dale Antwort kommentieren. Nicht möglich (zuerst muß, wie viel „rep“? Das wird nicht sehr bald passieren .. seltsames System.) So als Antwort:

Rücktaste kann wie folgt durch Zugabe von \ b auf die regex Definition hinzugefügt werden: [a-zA-Z0-9 \ b]. Oder Sie einfach erlauben, dem ganzen lateinischen Bereich, darunter mehr oder weniger alles, was „nicht exotische“ Zeichen (auch Zeichen steuern wie Backspace): ^ [\ u0000- \ u024F \ u20AC] + $

Nur echte Unicode-Zeichen außerhalb Latin gibt es das Euro-Zeichen (20ac), fügen Sie, was Sie sonst noch brauchen kann.

Um auch die Eingabe per Copy & Paste eingegeben handhaben, einfach binden auch an die „change“ -Ereignis und überprüfen Sie die Eingabe auch dort - sie löschen oder Striping es / gibt eine Fehlermeldung wie „nicht unterstützten Zeichen“ ..

if (!regex.test($j(this).val())) {
  alert('your input contained not supported characters');
  $j(this).val('');
  return false;
}

einschränken Specials Zeichen auf Tastendruck. Hier ist eine Testseite für Tastencodes: http://www.asquare.net/javascript/tests /KeyCode.html

var specialChars = [62,33,36,64,35,37,94,38,42,40,41];

some_element.bind("keypress", function(event) {
// prevent if in array
   if($.inArray(event.which,specialChars) != -1) {
       event.preventDefault();
   }
});

In Angular, brauchte ich ein richtiges Währungsformat in meinem Textfeld. Meine Lösung:

var angularApp = angular.module('Application', []);

...

// new angular directive
angularApp.directive('onlyNum', function() {
    return function( scope, element, attrs) {

        var specialChars = [62,33,36,64,35,37,94,38,42,40,41];

        // prevent these special characters
        element.bind("keypress", function(event) {
            if($.inArray(event.which,specialChars) != -1) {
                prevent( scope, event, attrs)
             }
        });

        var allowableKeys = [8,9,37,39,46,48,49,50,51,52,53,54,55,56
            ,57,96,97,98,99,100,101,102,103,104,105,110,190];

        element.bind("keydown", function(event) {
            if($.inArray(event.which,allowableKeys) == -1) {
                prevent( scope, event, attrs)
            }
        });
    };
})

// scope.$apply makes angular aware of your changes
function prevent( scope, event, attrs) {
    scope.$apply(function(){
        scope.$eval(attrs.onlyNum);
        event.preventDefault();
    });
    event.preventDefault();
}

In der html die Richtlinie hinzufügen

<input only-num type="text" maxlength="10" id="amount" placeholder="$XXXX.XX"
   autocomplete="off" ng-model="vm.amount" ng-change="vm.updateRequest()">

und in dem entsprechenden Winkelregler I lasse nur dort nur 1 Periode sein, Text zu konvertieren und die Anzahl NUM.HINZUFÜ Abrunden auf ‚blur‘

...

this.updateRequest = function() {
    amount = $scope.amount;
    if (amount != undefined) {
        document.getElementById('spcf').onkeypress = function (e) {
        // only allow one period in currency
        if (e.keyCode === 46 && this.value.split('.').length === 2) {
            return false;
        }
    }
    // Remove "." When Last Character and round the number on blur
    $("#amount").on("blur", function() {
      if (this.value.charAt(this.value.length-1) == ".") {
          this.value.replace(".","");
          $("#amount").val(this.value);
      }
      var num = parseFloat(this.value);
      // check for 'NaN' if its safe continue
      if (!isNaN(num)) {
        var num = (Math.round(parseFloat(this.value) * 100) / 100).toFixed(2);
        $("#amount").val(num);
      }
    });
    this.data.amountRequested = Math.round(parseFloat(amount) * 100) / 100;
}

...

So ersetzen Sonderzeichen, Leerzeichen und Bekehrtfall zu senken

$(document).ready(function (){
  $(document).on("keyup", "#Id", function () {
  $("#Id").val($("#Id").val().replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '').toLowerCase());
 }); 
});
[User below code to restrict special character also    

$(h.txtAmount).keydown(function (event) {
        if (event.shiftKey) {
            event.preventDefault();
        }
        if (event.keyCode == 46 || event.keyCode == 8) {
        }
        else {
            if (event.keyCode < 95) {
                if (event.keyCode < 48 || event.keyCode > 57) {
                    event.preventDefault();
                }
            }
            else {
                if (event.keyCode < 96 || event.keyCode > 105) {
                    event.preventDefault();
                }
            }
        }


    });]
$(function(){
      $('input').keyup(function(){
        var input_val = $(this).val();
        var inputRGEX = /^[a-zA-Z0-9]*$/;
        var inputResult = inputRGEX.test(input_val);
          if(!(inputResult))
          {     
            this.value = this.value.replace(/[^a-z0-9\s]/gi, '');
          }
       });
    });
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top