Eingabe per Regulärem Ausdruck auf Ziffern prüfen

Hallo,

ich will eine Eingabe daraufhin prüfen, dass sie nur aus 1 bis 6 Ziffern besteht,

Dazu habe ich folgenden Code:

preg_match (’/[0-9]{1,6}/’,$GS_Daten[‚Lieferschein_Nr‘])

Leider wird jetzt alles was ne Ziffer hat gematched.
Wie kann ich abfragen, dass der String wirklich nur 6 Ziffern hat?

Vorher hatte ich es mit is_numeric versucht, aber da bekomme ich ja auch 1.1 als korrekt ausgegeben.

Irgendwelche Tipps?

Hallo,

ich will eine Eingabe daraufhin prüfen, dass sie nur aus 1 bis
6 Ziffern besteht,

Dazu habe ich folgenden Code:

preg_match (’/[0-9]{1,6}/’,$GS_Daten[‚Lieferschein_Nr‘])

Ist schon beinahe richtig.

Es fehlt die Verankerung (^ oder $). Wenn wirklich nur
Ziffern kommen sollen, dann mußt Du beide verwenden.

 ...
 if(preg\_match('/^\d{1,6}$/', $GS\_Daten['Lieferschein\_Nr'], $matches))
 echo 'alles ok!';
 else
 echo $GS\_Daten['Lieferschein\_Nr']. ' nicht ok!';
 ...

Grüße

CMБ

if(preg_match(’/^\d{1,6}$/’, $GS_Daten[‚Lieferschein_Nr‘],

Danke, so funktioniert :smile:

Aber wozu sind eigentlich die Slashes am Anfang und am Ende des Strings?
Nachdem was ich gefunden habe stehen die für den Anfang und das Ende des Ausdrucks, nur wozu? In dem String kommt doch eh nur der Ausdruck vor, warum also nochmal extra ein Start und Stopzeichen?
Sowohl bei php als auch bei Reg Ausdrücken habe ich dazu nichts gefunden…

Nachdem was ich gefunden habe stehen die für den Anfang und
das Ende des Ausdrucks, nur wozu?

So wie ich es verstehe würde sonst auch xxx123456xxx als matched zutreffen.

Nachdem was ich gefunden habe stehen die für den Anfang und
das Ende des Ausdrucks, nur wozu?

So wie ich es verstehe würde sonst auch xxx123456xxx als
matched zutreffen.

Nein, dafür sind ja die Zeichen ^ und $ da.
Ich rede von /.
Wenn Du die Slashes weglässt, bekommst Du nur eine Warning von PHP.

Hallo,

Aber wozu sind eigentlich die Slashes am Anfang und am Ende
des Strings?
Nachdem was ich gefunden habe stehen die für den Anfang und
das Ende des Ausdrucks, nur wozu? In dem String kommt doch eh
nur der Ausdruck vor, warum also nochmal extra ein Start und
Stopzeichen?
Sowohl bei php als auch bei Reg Ausdrücken habe ich dazu
nichts gefunden…

Es wird eine extra-Begrenzung gebraucht, weil
der reguläre Ausdruck auch sog. „Modifizierer“
wie /x oder /i enthalten kann. Es ist beinahe
egal, welches Begrenzungszeichen man verwendet,
es darf nur nicht im Ausdruck vorkommen.

Siehe:

 ...
 $zeug = '123456';
 $begrenzer= Array(
 '/' =\> '/',
 '(' =\> ')',
 ' '\>',
 '{' =\> '}',
 '[' =\> ']',
 '"' =\> '"',
 '\''=\>'\'',
 '|' =\> '|',
 '\_' =\> '\_',
 '?' =\> '?',
 '^' =\> '^', # kommt im Regexp vor, geht nicht
 );
 $modifier = 'ix'; # /i/x/g
 
 while(list($links,$rechts)=each($begrenzer)) {
 echo "test $links ... $rechts,\t\t";
 $regexp = $links . '^\d{1,6}$' . $rechts . $modifier;
 echo "$regexp =".(preg\_match($regexp, $zeug) ? ' ok!' : ' nicht ok!')."\n";
 }
 ...

Grüße

CMБ

1 Like

Danke

Es wird eine extra-Begrenzung gebraucht, weil
der reguläre Ausdruck auch sog. „Modifizierer“
wie /x oder /i enthalten kann.

Danke,

dazu habe ich eben auch folgende Seite gefunden, die das auch sehr gut erklärt:
http://regexp-evaluator.de/tutorial/aufbau/