Kurze Frage: Regulärer Ausdruck

Blabliblubs

Mitglied
Hi,

ich möchte gerne einen regulären Ausdruck für dieses Beispiel hier zusammenschnitzen:

Beispiele:
Muster(einfach): 0-0-0-0
Oder: 1-1-1-1
Oder:0-2-1-1
Oder:1/2-1/2-1/2-1/2
Oder:1-2-0-1/2

Konkret bedeutet das: [0, 1/2, 1 oder 2] Binderstrich [0, 1/2, 1 oder 2] Binderstrich [0, 1/2, 1 oder 2] Binderstrich [0, 1/2, 1 oder 2]

Minimum-Eingabe: 0-0-0(einfachster Fall) oder eben 1/2-1/2-1/2
Maximum-Eingabe: 1/2-1/2-1/2-1/2

Ansatz:
PHP:
[^[0-2]/-{3}/-[0-2](/-[0-2])?$

Aber damit decke ich ja nicht die einhalb zwischen den Bindestrichen ab...wie bekomme ich das hin?

Gruß
 
Deinen Fehler kann ich nicht bestätigen:
PHP:
<?php
// Text bzw. String der durchsucht werden soll  
$string = '0-0-0-0'; 

// das Suchmuster mit Delimiter und Modifer (falls vorhanden)  
$pattern = '/(0|1\/2|1|2)-(0|1\/2|1|2)-(0|1\/2|1|2)-(0|1\/2|1|2)/'; 

// RegEx mit preg_match() auswerten  
preg_match($pattern, $string, $array); 

// formatierte Ausgabe  
echo '<pre>';
print_r($array);
echo '</pre>';
?>

Ergibt:
Code:
Array
(
    [0] => 0-0-0-0
    [1] => 0
    [2] => 0
    [3] => 0
    [4] => 0
)
 
Sollte dann wohl auch mit ereg() klappen oder?
PHP:
$Reg = "/(0|1\/2|1|2)-(0|1\/2|1|2)-(0|1\/2|1|2)-(0|1\/2|1|2)/";
		
		foreach($_POST['Dosierschema'] as $key => $value) {
         if($value != '' and $value != '999' and $value !='b.B.'){		
			if ( ereg($Reg, $value) ){
			$Ausgabe .= 'Dosierschema Angabe ohne Fehler (evtl. auch alle leer).';
			} else {
			$Fehler .= 'Fehler!</br>';
			$FailDosier = '*Die Dosierschema Eingabe entspricht nicht der vorgegebenen Formatierung!';
			}
		}
		 }

Da kommt bei mir ne Fehlermeldung. Also "FailDosier" wir aufgerufen...
 
Von ereg() trenne dich mal ganz schnell, da diese Funktion(en) als veraltet gilt/gelten und durch die durch die preg_*-Funktionen abgelöst wird/werden.
 
*küsschen auf die backe :))))))))

klappt nun wunderbar!

PHP:
	$Reg = "/(0|1\/2|1|2)-(0|1\/2|1|2)-(0|1\/2|1|2)-(0|1\/2|1|2)/";
		
		foreach($_POST['Dosierschema'] as $key => $value) {
         if($value != '' and $value != '999' and $value !='b.B.'){		
			if ( preg_match($Reg, $value) != '0' ){
			$Ausgabe .= 'Dosierschema Angabe ohne Fehler (evtl. auch alle leer).';
			} else {
			$Fehler .= 'Fehler!</br>';
			$FailDosier = '*Die Dosierschema Eingabe entspricht nicht der vorgegebenen Formatierung!';
			}
		}
		 }

Oppps...ein kleiner Schönheitsfehler scheint da noch drinn zu sein. Funktioniert bei dir das hier?
--> 0-0-0 ?

also der letzte Teil (- und (0, 1, 1/2 oder 2) müsste optional sein.

Derartiges funktioniert nicht ganz
PHP:
$Reg = "/(0|1\/2|1|2)-(0|1\/2|1|2)-(0|1\/2|1|2)-(0|1\/2|1|2)?/";
		
		foreach($_POST['Dosierschema'] as $key => $value) {
         if($value != '' and $value != '999' and $value !='b.B.'){		
			if ( preg_match($Reg, $value) != '0' ){
			$Ausgabe .= 'Dosierschema Angabe ohne Fehler (evtl. auch alle leer).';
			} else {
			$Fehler .= 'Fehler!</br>';
			$FailDosier = '*Die Dosierschema Eingabe entspricht nicht der vorgegebenen Formatierung!';
			}
		}
		 }

Also mit dem Fragezeichen für optinal.
 
Zurück