PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   regExp für Zahlenblöcke mit Trennzeichen (http://www.selfphp.de/forum/showthread.php?t=26034)

Doc_McSky 19.07.2017 14:50:37

regExp für Zahlenblöcke mit Trennzeichen
 
Hallo,

ich stehe manchmal echt auf dem Schlauch was reguläre Ausdrücke angeht und tue mich da auch echt schwer, daher muss ich mal nachfragen, vermutlich nur ein Klacks.

Ich habe einen String zu prüfen auf folgende Eigenschaft(en):
- Es sind nur Zahlenblöcke erlaubt die 9 stellig sind
- Es ist als Trennzeichen zwischen den Blöcken nur ein Semikolon erlaubt.

Also derzeit sieht die Abfrage wie folgt aus:
PHP-Code:

if (!preg_match("/^[0-9;]{9,}$/"$zwert)) ... 

Das klappt nicht ganz, wenn $zwert nur einen Block ungleich 9 Zahlen hat dann schlägt er an, auch wenn statt dem Semikolon ein anderes Zeichen verwendet wird, aber wenn mehrere Blöcke vorkommen, dann prüft er das mit der 9-stelligen Zahl nicht mehr richtig, kann mir da jemand sagen was ich verändern muss?

Bsp:
- 123456789 ok
- 123456 nicht ok
- 123456789#123456789 nicht ok
- aber 123456789;1234 oder 123;123456789 ist auch ok und das passt nicht

chorn 26.07.2017 10:36:21

AW: regExp für Zahlenblöcke mit Trennzeichen
 
ich versteh' die Anforderung nicht. Sollen jetzt 4 Zahlen angenommen werden oder nicht? Sind deine Beispiele Ist- oder Sollwerte? Ist da schon deine Negierung mit einbezogen?

Doc_McSky 26.07.2017 16:49:38

AW: regExp für Zahlenblöcke mit Trennzeichen
 
Hallo,

sollte ich mich unklar ausgedrückt haben tut es mir leid.
also der preg_match() Ausdruck soll prüfen ob der String wirklich nur aus x-beliebig vielen 9er(!) Zahlenblöcken besteht, die auch nur mit einem Semikolon getrennt sein dürfen.

Die Negierung (also trifft eben nicht zu) dessen erzeugt dann halt eine Fehlermeldung für den User.

Doc_McSky 16.08.2017 13:08:55

AW: regExp für Zahlenblöcke mit Trennzeichen
 
Hallo,

würde den Beitrag gerne mal pushen, ist das denn wirklich so schwer?
Das hätte ich jetzt gar nicht gedacht, aber mit RegExp stehe ich grundsätzlich auf dem Kriegsfuß.

Geht es einfacher wenn ich das Trennzeichen ändere, es sollte nämlich mittlerweile ein Komma sein, kein Semikolon. ;)

Also nochmal versucht zu erklären:
Der Ausdruck soll prüfen ob eine NUR Zahlenreihe, wenn denn vorhanden, aus genau 9 Zahlen oder mehreren Zahlenblöcken mit je 9 Zahlen besteht und wenn es mehrere sind, ob sie dann durch genau ein Komma getrennt sind.

Vielleicht geht das per RegExp gar nicht?
Müsste ich versuchen es in ein Array zu zerlegen und die einzelnen Values prüfen?

chorn 21.08.2017 08:34:03

AW: regExp für Zahlenblöcke mit Trennzeichen
 
sollte klappen:

Code:

<?php

$subjects = [
        '',
        '123',
        '123456789',
        '123456789,',
        '123456789,123',
        '123456789,123456789',
        '123456789,123456789,',
];
foreach($subjects as $subject){
        var_dump(preg_match('`^([0-9]{9},)+$`', $subject, $matches));
        var_dump($matches);
}


Doc_McSky 29.08.2017 14:27:21

AW: regExp für Zahlenblöcke mit Trennzeichen
 
Hallo chorn,

Danke für deine Antwort, wow, das ist ja mal nen Ausdruck, den muss man erstmal verstehen.

Allerdings macht die Geschichte jetzt noch nicht ganz das gewünschte Ergebnis, da IMMER am Ende auch einer gültigen Aussage noch ein Komma stehen muss, damit preg_match() TRUE wird.
Also in deinem Demo passt es dann bei Wert 1 und 2 logischerweise nicht, aber auch Wert 3 passt nicht, in Zeile 4 mit dem Komma hinten dran dann doch.
Es muss also das Komma noch zwingend erfüllt sein, das ist aber so nicht richtig, das Komma am Ende darf auch nicht sein.

Allerdings habe ich gerade nicht den geringsten Plan wie der reg.Ausdruck da jetzt angepasst werden müsste. -_-

chorn 29.08.2017 15:44:14

AW: regExp für Zahlenblöcke mit Trennzeichen
 
guck dir das mal bei regex101.com an und spiel damit rum. Tipp: ?


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:32:40 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.