2009-06-25 8 views
3

Was ich möchte einige Eingaben erhalten ist, wie bestimmte Zeichen aus einem Textfeld (oder Textarea) mit JQuery entfernt werden. Ich habe den Code in C#, aber ich kann das nicht in JQuery Javascript übersetzen. Mein Problem ist, dass ich nicht weiß, wie man den Wert aus einem Textfeld als ein Zeichenarray erhält, das ich dann durchschleifen und gegen eine bestimmte Menge unerwünschter Zeichen vergleichen kann. Dies ist, wie "weit" Ich habe in JQuery kommen:Entfernen von unerwünschten Zeichen aus Textbox mit JQuery

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

    // code here 

}); 

Dies ist mein Code in 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) ; 

UPDATE:

ich mit einer Kombination aus einigen Antworten ging unten (ich werde sie upvote) und meine endgültige JQuery sieht so aus und funktioniert:

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

Danke allen!

+0

xml Validierung basiert auf das? Ich kann nur annehmen, dass dies nicht utf-8 sein soll (was bis zu 6 Bytes pro Zeichen haben kann) –

+0

validing xml ... ?? Ich denke, Sie beziehen sich auf meine C# Variable _validXml ... was wirklich nichts mit dem zu tun hat, was ich auf dem Client machen möchte. –

Antwort

1

Textarea:

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

jQuery-Code:

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 += c; 
    } 
} 
$('#item').val(newtext); 

Dies hat eigentlich sehr wenig mit jQuery zu tun, mir scheint, mit Ausnahme der Textdaten zuzugreifen und sie wieder eingestellt.

+0

Obwohl dies mit JQuery am wenigsten zu tun hatte, löste das mein Problem. –

1

Sie können die charCodeAt()-Methode kombiniert mit der length -Eigenschaft von Strings verwenden, um die Zeichen in der Zeichenfolge zu durchlaufen.

Etwas wie:

$("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... 
}); 

Meine erste Version verwendet charAt(), aber da es aussieht wie du mit Unicode-Codepunkten zu tun hat, ist charCodeAt() besser geeignet.

+0

(+1) Danke, ich bin auf dem richtigen Weg ... –

-1

Verwenden Sie einen Ereignisbeobachter (onkeydown/onkeypress/onkeyup) für die Eingabe/textarea, drücken Sie die Taste, wenn der Schlüssel ein unerwünschtes Zeichen ist, stoppen Sie das Ereignis.

$("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); 
} 
}); 
+3

Sehr schön, aber geht nicht mit dem Fall, wenn Text eingefügt wird. – razzed

+0

Yepp und das ist, was ich versuche, tatsächlich zu validieren –

+0

Für mich 'Event.stop (e)' hat nicht funktioniert. 'e.preventDefault()' hat den Job gemacht. – Episodex

-1

den Wert der Textarea Versuch zu bekommen:

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

dieses Beispiel unerwünschte Zeichen versuchen .. zu entfernen kopieren i aus der jquery Dokumentation (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(", ")); 
-1

Ich ziehe den Charakter zu stoppen an erster Stelle eingegeben zu werden, mit dieser Art von JavaScript-Funktion (aus meiner schattigen Vergangenheit):

jede Eingabesteuerung hat so etwas wie dies darauf: onkeypress = 'CheckKey (dies, "a-zA-Z0-9", "N", "10");

die Funktion wie folgt aussieht:

//**************************************************************************** 
    // 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); 
     } 
6

would't dies der Fall für reguläre Ausdrücke sein, wie:

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

Sie vermissen einen Raum dort ... aber das ist die beste Lösung imho. – Evgeny

+0

Wahrscheinlich schneller und so, aber ich möchte, dass mein Code hier Sinn ergibt, also gehe ich nicht mit Regex ... zumindest nicht dieses Mal, aber danke trotzdem. –

Verwandte Themen