MudGuard: preg_match | Zahl >=500 bis 9 000 000 erlauben

Beitrag lesen

Hi,

ich möchte in einem Formular nur die Zahlen von 500 - 9 000 000 erlauben.
Ich habe u.a. diesen Code probiert. Müsste doch eigentlich klappen.. Hat jemand eine Idee?

Zahlenbereiche mit Regex zu prüfen ist eher schwierig.

Dein Suchausdruck:
^([5-9][1-9][1-9][1-9][1-9[1-9][1-9]]{3,7})$

Die Klammerung () ist überflüssig, da Du mit ^ und $ erzwingst, daß der ganze String matcht.
Der gefundene Bereich ist also, wenn es einen Treffer ergibt, der gesamte ursprüngliche String.

Bleibt also das hier:

[1][1-9][1-9][1-9][1-9[1-9][1-9]]{3,7}$

^ erzwingt das Matching am Stringanfang.

[5-9] die erste Ziffer muß also zwischen 5 und 9 (jeweils inklusive) sein. Das paßt schon nicht zu Deiner Forderung, eine Zahl zwischen 500 und 9000000 zu treffen. Denn 1000 liegt zwischen 500 und 9000000 - fängt aber mit einer 1 an, die von Dir nicht erlaubt wird.

[1-9][1-9][1-9] die zweite bis vierte Ziffer dürfen also keine 0 sein. Warum nicht? Paßt nicht zu Deiner Aufgabe.

[1-9[1-9] an fünfter Stelle darf also 1 bis 9 oder [ stehen. Dafür braucht es aber die 1-9 nicht doppelt in der Klammer ... Hm. Die [ paßt nicht zu Deiner Forderung, daß es eine Zahl sein muß.

[1-9] nochmal eine nicht-0-Ziffer.

und zum Schluß
]{3,7}$ Also ]]] oder ]]]] oder ]]]]] oder ]]]]]] oder ]]]]]]]
paßt auch nicht

Mach es Dir einfacher, und verwende höchstens einen Regex, um zu prüfen, ob der String nur aus Ziffern besteht:
[2]+$ oder ^\d+$  (hierbei ggf. den \ escapen, wenn Du "" außenrum verwendest)

Und die Prüfung auf den Zahlenbereich mit < und > bzw. <= und >= ...

cu,
Andreas

--
Warum nennt sich Andreas hier MudGuard?
O o ostern ...
Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.

  1. 5-9 ↩︎

  2. 0-9 ↩︎