Regulärer Ausdruck zum Überprüfen von Preisfeldern
Thorsten Steffen
- perl
Hi,
ich suche einen regulären Ausdruck, um Preisfelder der Form "123,45" zu überprüfen, also Ziffern und Komma dürfen vorkommen.
Habs mal mit
if ($preis =~ /[0-9,]/) ...
probiert, aber irgendwie funktionierts nicht.
Wie muß es heißen und wie prüft man generell Felder, in denen nur bestimmte Zeichen vorkommen dürfen.
Hab in selfhtml nix zu diesen speziellen Fällen gefunden.
Gruß
Thorsten
Wie muß es heißen und wie prüft man generell Felder, in denen nur bestimmte Zeichen vorkommen dürfen.
Hab in selfhtml nix zu diesen speziellen Fällen gefunden.
hallo,
hier mal ein Stueck js:
if (theForm.Stmd_Knr.value == "")
{
alert("Geben Sie einen Wert in das Feld "Kundennummer" ein.");
theForm.ccode.focus();
return (false);
}
var checkOK = "0123456789";
var checkStr = theForm.Stmd_Knr.value;
var allValid = true;
var decPoints = 0;
var allNum = "";
for (i = 0; i < checkStr.length; i++)
{
ch = checkStr.charAt(i);
for (j = 0; j < checkOK.length; j++)
if (ch == checkOK.charAt(j))
break;
if (j == checkOK.length)
{
allValid = false;
break;
}
if (ch == ",")
{
allNum += ".";
decPoints++;
}
else
allNum += ch;
}
if (!allValid)
{
alert("Geben Sie nur Ziffern in das Feld "Kundennummer" ein.");
theForm.Stmd_Knr.focus();
return (false);
}
vielleicht nuetzt Dir das was.
Gruss
Christian
Hi!
$i = <STDIN>;
chomp($i);
if ($i =~ /[^0-9,]/) {
print "Bad format!\n";
} else {
print "Ok!\n";
}
Ok, muß für nen CGI natürlich angepasst werden, sollte dich aber in die richtige Richtung weisen.
CU
ArneB
Hallo Thorsten,
if ($preis =~ /[0-9,]/) ...
probiert, aber irgendwie funktionierts nicht.
damit überprüfst Du nur, ob eine Zahl oder ein Komma vorkommt.
Du kannst nun mehrere Methoden verwenden, um die Eingabe zu überprüfen. Entweder du Überprüfst, ob die die Eingabe dem geforderten Format entspricht, oder ob unerlaubte bzw. nur erlaubte Zeichen vorkommen,....
Ich würde folgendermaßen vorgehen:
Wie schaut ein Preis aus: 123,45 / 123,4 oder nur 123. Danach bastel ich mir dann die RegExp:
if ($preis =~ /^\d+(,\d{1,2})$/) {...}
^..................Anfang der Variablen
^.................mindestens eine Ziffer
^.............Komma mit ...
^...........einer oder zwei Ziffern...
^.....oder keine Nachkommastellen
^...Ende der Variablen (vor Newline)
Im übrigen bietet es sich immer an, mit einer RegExp das Eingabeformat zu überprüfen (sofern es eindeutig vorgegeben ist), und nicht auf einzelne Zeichen zu testen, da dies wesentlich genauer ist.
Gruß AlexBausW
Hi Alex,
vielen Dank für Deine Hilfe, hab aber noch einige Fragen zum Verständnis Deines Ausdruckes:
Gruß
Thorsten
Hallo Thorsten,
if ($preis =~ /[0-9,]/) ...
probiert, aber irgendwie funktionierts nicht.damit überprüfst Du nur, ob eine Zahl oder ein Komma vorkommt.
Du kannst nun mehrere Methoden verwenden, um die Eingabe zu überprüfen. Entweder du Überprüfst, ob die die Eingabe dem geforderten Format entspricht, oder ob unerlaubte bzw. nur erlaubte Zeichen vorkommen,....
Ich würde folgendermaßen vorgehen:
Wie schaut ein Preis aus: 123,45 / 123,4 oder nur 123. Danach bastel ich mir dann die RegExp:
if ($preis =~ /^\d+(,\d{1,2})$/) {...}
^..................Anfang der Variablen
^.................mindestens eine Ziffer
^.............Komma mit ...
^...........einer oder zwei Ziffern...
^.....oder keine Nachkommastellen
^...Ende der Variablen (vor Newline)
Im übrigen bietet es sich immer an, mit einer RegExp das Eingabeformat zu überprüfen (sofern es eindeutig vorgegeben ist), und nicht auf einzelne Zeichen zu testen, da dies wesentlich genauer ist.Gruß AlexBausW
Hallo Thorsten,
- Kann ich anstatt \d{1,2} auch 0-9{1-2} angeben ?
Nicht ganz! So wie Du es geschrieben hast, würde es auf die Strings "0-9" und "0-99" passen. Die geschweiften Klammern beziehen sich auf den Ausdruck direkt davor (also in deinem Fall die 9). Da du aber wohl eigentliche eine Auswahl der Ziffern 0-9 haben wolltest, hast Du hier nur die eckigen Klammern vergessen:
[0-9]{1,2}
\d ist einfach nur die Kurzform für Ziffern (digits).
- Fangen also Eingabeformatprüfungen immer mit ^ an und hören mit $ auf ?
Sollten sie! Zumindest, wenn Du den kompletten String überprüfen möchtest ^ und $ stehen für Zeilenanfang bzw. -ende. Wenn Du also eine Zahlenüberprüfung ohne diese Zeichen durchführst, sind auch Strings wie "blafasel123,45blubb" gültig, da ja eine Zahl im geforderten Format vorkommt ...
Gruß,
Jörk
PS: Nicht immer das ganze Geraffel vom vorherigen Text quoten ...