# In Textarea Sonderzeichen unterbinden



## Nutzer551 (25. März 2010)

Hallo zusammen,

ich habe ein kleines Formular mit einer Textarea.

Wenn ein User diese Textarea verwendet und das € Zeichen verwendet, möchte ich dass das 

1. entweder direkt in EURO umgewandelt wird oder

2. eine Fehlermeldung erscheint die sagt (aber auch das Formular unterbricht): € durch EURO ersetzen, dann fortfahren.

Ersteres wäre wünschenswert.

Ist so etwas umsetzbar?

Danke im voraus.

Habe es so versucht:


```
if(objForm.BEMERKUNG.value == "€"){
    alert("Das € Zeichen bitte aus dem manuellen Textfeld löschen und durch EURO ersetzen!");
    objForm.BEMERKUNG.focus();
    return false;
  }
```

Allerdings führt er den "alert" nur aus wenn auch tatsächlich nur das € Zeichen in der Textarea steht.

Wenn ich aber schreibe: *10 €* 
gibt er die Fehlermeldung nicht aus...


----------



## rd4eva (25. März 2010)

Mit objForm.BEMERKUNG.value == "€" prüfst du ja auch ob der gesamte Inhalt dem String "€" entspricht.

Verwende entweder indexof() oder search().


----------



## Nutzer551 (26. März 2010)

hi,

erstmal danke. bin aber leider noch nicht sehr fit in solchen sachen :-(

habe es so versucht:


```
if(objForm.BEMERKUNG.indexOf("€")){
    alert("Das € Zeichen bitte aus dem manuellen Textfeld löschen und durch EURO ersetzen!");
    objForm.BEMERKUNG.focus();
    return false;
  }
```

t aber nicht wirklich.

Fehlermeldung: "Das Objekt unterstützt diese Eigenschaft oder Methode nicht".

Hier ein bisschen mehr:


```
<script type="text/javascript">
<!--
// Defaultwerte
var name= "";
var bemerkung= "";

function sendMail(objForm){  
var blnCheck = false;      


  if(objForm.NAME.value == ""){
    alert("Bitte Deinen Namen angeben!");
    objForm.NAME.focus();
    return false;
  }   

  if(objForm.BEMERKUNG.indexOf("€")){
    alert("Das € Zeichen bitte aus dem manuellen Textfeld löschen und durch EURO ersetzen!");
    objForm.BEMERKUNG.focus();
    return false;
  }
.
.
.
usw.
.
.
.
//-->
</script>
```

? mmmh


----------



## rd4eva (26. März 2010)

Hast du dir die indexof() doku überhaupt mal angeschaut?



> Ermittelt das erste Vorkommen eines Zeichens oder einer Zeichenkette innerhalb einer Zeichenkette und gibt zurück, an wie vielter Stelle das Zeichen in der Zeichenkette steht. Die Zählung beginnt bei 0. Wenn die Suche erfolglos ist, wird -1 zurückgegeben.
> Optional ist es möglich, die Funktion in einem zweiten Parameter anzuweisen, ab der wie vielten Stelle in der Zeichenkette sie mit der Suche beginnen soll.



Fehler 1:
Du wendest indexof auf die Textarea an und nicht auf den Inhalt der Textarea.

Fehler 2:
Du prüfst auf im Prinzip auf true/false. Der Rückgabewert von indexof ist aber -1 ( entspricht false) oder >=0 (entspricht true)


Hier ein Beispiel zur verdeutlichung:

```
<script type="text/javascript">
			
	function checkit(){
		if(testform.bemerkung.value.indexOf("€") != -1){
			alert("Das € Zeichen bitte aus dem manuellen Textfeld löschen und durch EURO ersetzen!");
			objForm.BEMERKUNG.focus();
			return false;
		}else{
			alert("Passt alles");
			return true;
		}

	}
			
<form name="testform" onsubmit="checkit();return false;">
	<textarea name="bemerkung"></textarea>
	<input type="submit" name="submit" value="submit">
</form>
```


----------



## deepthroat (26. März 2010)

Hi.

Du mußt schon auf den Text der Textarea zugreifen.

objForm.BEMERKUNG ist deine Textarea - und diese hat keine indexOf Methode.

objForm.BEMERKUNG.value ist der Text (also ein String) deiner Textarea - dieser besitzt eine indexOf Methode.


Warum willst du denn überhaupt das € Zeichen nicht im Text haben? Falls es irgendwo nicht richtig dargestellt wird, stimmt irgendetwas mit deiner Zeichenkodierung nicht. Dann wäre es aber besser das Problem zu beseitigen anstatt ein (halb ausgegorenes) Workaround zu implementieren.

Zeichen ersetzen kannst du übrigens mit der String.replace() Methode.

Gruß


----------



## Nutzer551 (26. März 2010)

@ rd4eva 

Ne, hatte ich leider noch nicht. Bin bisher erst beim weltmeisterlichen googlen hängen geblieben. Arbeite mich ja in solchen Dingen gerade erst
ein... Die Verdeutlichung ist klar. Nach weiteren versuchen hat sich dann auch Dein niedergeschriebener Fehler 2 ergeben. Habe natürlich den
Rückgabewert -1 erhalten.

@ deepthroat

Auch ne nette Idee -> String.replace()


Tüfftel jetzt mal an beiden Methoden und entscheide mich dann später. Möchte mich aber für eure Hilfe bedanken.
Anliegen wurde bravorös gelöst...

Danke !


____________________________________________________________
Manchmal hilft ein Schlag auf den Hinterkopf, manchmal einer ins Gesicht


----------



## Dynamite D (19. April 2010)

Hallo,

schließe mich hier mal an 

Genau so etwas habe ich gesucht, hab aber ein zusätzliches Problem bekommen.
Bisher habe ich:


```
<script type="text/javascript">
function keinEuro(el)
{
  var val = el.value.replace(/€/g, "Euro");
  el.value = val;
}
</script>

<textarea name="Bemerkung"rows="4" cols="50" wrap="virtual" onkeyup="keinEuro(this)";>
```

Wenn ich beispielsweise jetzt was in meinem eingetragenen Text ändern möchte, kann ich mit den Pfeiltasten nicht zur gewollten Stelle fahren,
da er mich immer wieder zum Ende versetzt, klicke ich mit der Maus zu der Stelle die geändert werden soll, bleibt der Mauszeiger nur so lange stehen bis ich ein
Buchstaben, Zahl oder ein Zeichen gesetzt habe, dann fliege ich wieder zum Ende des Textes. 

Ich hoffe es ist verständlich und es kann Jemand helfen...


----------



## Sven Mintel (19. April 2010)

Moin,

das Verhalten kommt daher, dass du jedes mal den Wert des Feldes neu setzt.
Lösung:
Prüfe vorher, ob überhaupt ein Eurozeichen im Feld steht, bevor du seinen Inhalt änderst.


----------



## Dynamite D (19. April 2010)

Hallo Sven,

wenn ich Dich richtig verstehe meinst du es so:

Ich schreibe meine Text, 
lass "wie auch immer" das eingegebene erstmal prüfen,
dann € Symbol ändern (natürlich automatisch)
und dann nochmal prüfen vor senden?

Wie soll ich das denn anstellen. Bin absolut kein Spezialist.


----------



## Sven Mintel (19. April 2010)

Mit dem Senden hab ich da nichts gemeint.

Ich meinte es nur so:
	
	
	



```
<script type="text/javascript">
function keinEuro(el)
{
  if(el.value.match(/€/g))//Prüfen, ob Eurozeichen vorhanden
  {
    var val = el.value.replace(/€/g, "Euro");
    el.value = val;
  }
}
</script>
```


----------



## Dynamite D (19. April 2010)

Ich danke Dir.

"match" ... mit ein bisschen lesen und dem Einsatz logischen Denkvermögens  hätte es wahrscheinlich
auch ohne Hilfe klappen können. In diesem Fall stellt man sich nur die Frage: WANN ? 

Genau was ich gesucht habe. Einmalig 

Besten Dank


----------



## Porkyy (21. April 2010)

hi,

hab das ganze mal ausprobiert, allerdings habe ich es für "nurbuchstaben" umgeschrieben,
also *(/[^a-z A-Z ä Ä ö Ö ü Ü ß é É á Á ú Ú ó Ó í Í ý Ý,]/)*,

dabei ist mir aufgefallen das wenn ich beispielsweise eine zahl eintrage und taste gedrückt halte, schreibt
er trotzdem die zahlen. wenn ich dann aber mit buchstaben weiter fortfahre, wird mit jedem buchstaben
eine der zahlen gelöscht.

kann man das verhindern? also das tatsächlich keine zahlen möglich sind?
mfg

wenn ich das ganze aber auf "nurzahlen" umstelle und zwar so: *(/[^\.^,\d]/g)* dann klappt es. feld akzeptiert keine buchstaben.

Bor wir panne bin ich denn 

Hatte wohl Tomaten auf den Augen. 

(/[^a-z A-Z ä Ä ö Ö ü Ü ß é É á Á ú Ú ó Ó í Í ý Ý,]/*g*, '')

Alles klar


----------



## Sven Mintel (21. April 2010)

Es gibt da übrigens noch einen etwas anderen Weg.

Momentan wird ja das unerlaubte Zeichen im Nachhinein wieder entfernt.
Das hat den Nachteil, dass im Falle, dass etwas entfernt wurde, der Cursor evtl. an einer anderen Position steht.

Man kann aber auch, bevor es im Feld eingegeben wird, den KeyCode des Events überprüfen, und wenn er nicht passt, den Event canceln.

Hier nen kleines Beispiel dazu:


```
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; 
                                charset=ISO-8859-1"   />
<meta name="author"             content="doktormolle" />
<meta name="date"               content="2010-04-07" />
<title>Test</title>
<script type="text/javascript">
<!--
function fx(e,p)
{
  var key=(e.charCode)
                     ?e.charCode//Gecko
                      :e.keyCode;//andere

  return(p.test(String.fromCharCode(key)));
}
//-->
</script>

</head>
<body>
<input onkeypress="return fx(event,/[\d]/)">nur Zahlen<br/>
<input onkeypress="return fx(event,/[^\d]/)">keine Zahlen<br/>
<input onkeypress="return fx(event,/[a-z]/i)">nur Buchstaben A-Z<br/>
</body>
</html>
```


----------



## Porkyy (21. April 2010)

Methode ist mir nicht bekannt, gefällt riesig, aber
wie kann ich dort replace für das € Symbol anwenden?

hab bisher erfolglos probiert...


----------



## Sven Mintel (21. April 2010)

Dazu müsste  man das TextRange-Objekt bemühen(da EURO mehr als 1 Zeichen beinhaltet), hab mal ein Beispiel dazu fertiggemacht.


----------



## Porkyy (21. April 2010)

Gaaaaaanz großer Sport.

Wäre mir nie in den Sinn gekommen. Feine Sache.

Danke


----------

