search(regExp) Problem
Moe
- javascript
Hi,
folgendes Problem:
Ich habe ein Eingabefeld, welches ich darauf testen will, dass nur Buchstaben eingegeben wurde oder das Feld ganz leer gelassen wurde.
Dafür möchte ich den regulären Ausdruck und den Fehlertext direkt in den input-Tag schreiben und diese dann per getAttribute() in eine Variable schreiben. Das klappt auch (habe ich mit alert getestet).
Allerdings klappt die Anweisung feld.value.search(pattern) nicht. Trotz reiner Buchstabeneingabe wird der alert() ausgegeben. Wenn ich dagegen feld.value.search(/[1]+$/) angebe, funktioniert es.
Aber in der Variablen steht doch genau dieser Ausdruck drin?! Muss ich die Variable vorher umwandeln oder wie oder was? Komme hier nicht weiter und bitte um Hilfe.
Danke&Grüße
Hier der Code:
<html>
<head></head>
<body>
<script type="text/javascript">
function checkField(feld) {
var pattern = document.getElementsByName(feld.name)[0].getAttribute("pattern");
var errorMsg = document.getElementsByName(feld.name)[0].getAttribute("errorMsg");
// alert(pattern);
// alert(errorMsg);
if (feld.value.search(pattern) == -1 && feld.value != "")
{
alert(errorMsg);
}
}
</script>
<form>
<input type="text" name="vorname" errorMsg="Nur Buchstaben eingeben oder leer lassen!" pattern="/[2]+$/" onBlur="checkField(this)">
</form>
</body>
</html>
hi,
Allerdings klappt die Anweisung feld.value.search(pattern) nicht. Trotz reiner Buchstabeneingabe wird der alert() ausgegeben. Wenn ich dagegen feld.value.search(/[1]+$/) angebe, funktioniert es.
Aber in der Variablen steht doch genau dieser Ausdruck drin?!
afaik ist das einer der wenigen fälle, wo du keine variablen verwenden kannst. da das suchmuster ohne umschliessende anführungszeichen angegeben wird, könnte der variablenname ja ebenso gut ein paatern sein, dass du verwenden möchtest - JS hat hier keine möglichkeit, zu unterscheiden.
fazit: geht m.e. nicht.
gruss,
wahsaga
A-Za-z ↩︎
gruss Moe,
var pattern = document.getElementsByName(feld.name)[0].getAttribute("pattern");
var errorMsg = document.getElementsByName(feld.name)[0].getAttribute("errorMsg");
// alert(pattern);
// alert(errorMsg);
if (feld.value.search(pattern) == -1 && feld.value != "")
{
alert(errorMsg);
}}
...
<input type="text" name="vorname" errorMsg="Nur Buchstaben eingeben oder leer lassen!" pattern="/[1]+$/" onBlur="checkField(this)">
der wert Deines attributes "pattern" ist vom typ "string";
diesen wert weist Du nun Deiner js-variable "pattern" zu -
dabei bleibt der typ unveraendert "string", auch wenn Du
fuer den attributwert "pattern" die literal-schreibweise
von regulaeren ausdruecken verwendest;
der konstruktor "RegExp" hilft an dieser stelle weiter:
"RegExp" erwartet zwei parameter vom typ "string" -
parameter 1 ist das suchmuster (ohne slashes), parameter
2 steht fuer die unterschiedlichen variationen der flags
"g", "i", "m" (oder ist eben ein leerstring);
Dein bsp. sieht dann fogendermassen aus:
var pattern = document.getElementsByName(feld.name)[0].getAttribute("pattern");
pattern = new RegExp(pattern,"");
...
<input type="text" name="vorname" errorMsg="Nur Buchstaben eingeben oder leer lassen!" pattern="[2]+$" onblur="checkField(this)">
viel erfolg und by(t)e by(t)e - peterS. - pseliger@gmx.net
--
sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)
Hey,
Dein bsp. sieht dann fogendermassen aus:
var pattern = document.getElementsByName(feld.name)[0].getAttribute("pattern");
pattern = new RegExp(pattern,"");...
<input type="text" name="vorname" errorMsg="Nur Buchstaben eingeben oder leer lassen!" pattern="[1]+$" onblur="checkField(this)">
Danke für den Hinweis. Nach dieser Lösung habe ich gesucht.
Moe
A-Za-z ↩︎