Thema: auf dezimalzahl prüfen?

hallo forum,

ich hab nun schon alles mögliche probiert, um eine dezimalzahl zu prüfen, komme aber nicht dahinter.

$/[^0-9.]//g;
trifft leider auch negative zahlen.
$/[^0-9.-]//g;
lässt auch - zwischen den ziffern zu.
also es darf nur ein minus am anfang zugelassen werden und sonst alles was nicht 0-9 oder . vergessen werden. Bekommt man das in einer regex unter?

Grüsse

Re: auf dezimalzahl prüfen?

versuch mal diesen Ausdruck:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">/D+//[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">dieser ausdruck filtert alle nicht numerischen zeichen raus. ob bei -100 das minus auch verschwindet, weiß ich nicht sicher.
 
 
 
Grüße aus FFM
joking

3

Re: auf dezimalzahl prüfen?

N'abend,

inner regex kannst Du alles mögliche unterbringen.

Ich weiß nicht, in welchem Zusammenhang Du's brauchst, und auch nicht, in welcher Sprache.

Hier mal ein mögliches Beispiel in perl (übern Daumen):

$d='qwerasdf1.0890adsfqewr'; # wird gefunden

#$d='qwerasdf+1.adsfqewr'; # wird nicht gefunden

#$d='qwerasdf+1+8.90adsfqewr'; # wird nicht gefunden

#$d='qwerasdf-1adsfqewr'; # wird gefunden

#$d='qwerasdf+10890adsfqewr'; # wird gefunden

$d=~/^[^d-+]*([-+]?d+(?:.?d+)*)[^.-\+]*$/;

print $1;

Solange Du nicht sagst, was genau passieren soll,
ist es schwierig (zumindest für mich) zu sagen,
wie Du's machen könntest.

gruß

matho
 
  <small>[ 17-04-2002, 22:09: Beitrag editiert von: matho ]</small>

Re: auf dezimalzahl prüfen?

vielen Dank euch beiden,

ich will in php eine nutzereingabe überprüfen, die als dezimalzahl in die mysql-db eingefügt werden soll. Ich will aber vorher schon Fehler abfangen und die Daten korrigiert (als Vorschlag)zum userformular zurückgeben - also ein substitute bei falschen Zeichen. bis jetzt mach ich es so, das ich am anfang mit ereg("^-",$zahl) prüfe, ob ein - am Anfang vorhanden ist und wenn ja, dieses in $minus wegspeichere, dann ereg_replace auf alle Zeichen ausser [^0-9.] durchführe und am schluß das eventuell vorhandene - wieder davor schreibe:

if (ereg("^-",$zahl)) $minus="-";
$zahl=$minus.ereg_replace("[^0-9.]","",$zahl);

Das soll nun in einem Abwasch gemacht werden...
ich komme aber nicht dahinter.

Grüsse

der schneemann ;-)

5

Re: auf dezimalzahl prüfen?

Moinmoin,

zB. ginge das:

/^s*-?d+(.d+)?s*$/

oder

/^s*-?d+(?:.d+)?s*$/

Erlaubt sind nun nur Angaben,
die entweder ein oder kein Minuszeichen am Anfang, sonst aber nirgends haben, höchstens einen Punkt enthalten, der gefolgt werden muß von mindestens einer Ziffer, und nicht durch Leerzeichen voneinander getrennt sind.
Beliebige Leerzeichen vor und hinter der Eingabe
sind erlaubt.
Wenn Du etwaige solche vor Eintrag in Deine Datenbank entfernen möchtest, setzt Du noch zwo Klammern:

/^s*(-?d+(?:.d+)?)s*$/

und fragst eben diesen geklammerten Ausdruck ab.

gruß

matho

P.S. Ich bin mir nun nicht sicher, ob alle php-versionen die Formulierung ?: in der nun inneren Klammer zulassen.
Die ist nicht unbedingt notwendig, spart aber ein bißchen Zeit.

Re: auf dezimalzahl prüfen?

Vielen Dank fürs tüfteln, werde das morgen mal probieren...
Sieht schon richtig wild aus, wofür steht ?:
hab das nirgends bisher gesehen und in meinem kochbuch steht auch nix dazu (glaub ich jedenfalls)

Grüsse

7

Re: auf dezimalzahl prüfen?

Moinmoin,

?: steht für einen Klammerausdruck, der nur
gruppierenden Effekt haben soll und nichts einfängt.

gruß

matho

8

Re: auf dezimalzahl prüfen?

matho -> unser regex god

Source Code Editor in Perl
http://proton-ce.sf.net