5 Stimmen

Reguläre Ausdrücke für Url-Parser

<?php

    $string = 'user34567';

            if(preg_match('/user(^[0-9]{1,8}+$)/', $string)){
                echo 1;
            }

?>

Ich möchte prüfen, ob die Zeichenfolge das Wort Benutzer Es folgt eine Nummer, die maximal 8 Zeichen lang sein darf.

11voto

Ja͢ck Punkte 165747

Sie sind tatsächlich sehr nah dran:

if(preg_match('/^user[0-9]{1,8}$/', $string)){

Der Anker für "muss am Anfang des Strings übereinstimmen" sollte ganz vorn stehen, gefolgt von dem Literal "user"; dann geben Sie das Zeichen-Set [0-9] und den Multiplikator {1,8} an. Schließlich beenden Sie mit dem Anker "muss am Ende des Strings übereinstimmen".

Ein paar Kommentare zu Ihrem originalen Ausdruck:

  1. Das ^ entspricht dem Anfang eines Strings, daher wird das Schreiben an einer anderen Stelle innerhalb dieses Ausdrucks außer am Anfang nicht die erwarteten Ergebnisse liefern
  2. Das + ist ein Multiplikator; {1,8} ist es auch, aber nur ein Multiplikator kann nach einem Ausdruck verwendet werden
  3. Es sei denn, Sie beabsichtigen, die Zahlen, die Sie im Ausdruck gefunden haben, zu verwenden, benötigen Sie keine Klammern.

Übrigens, anstelle von [0-9] könnten Sie auch \d verwenden. Es ist eine automatische Zeichengruppe, die den regulären Ausdruck verkürzt, obwohl dieser bestimmte nicht allzu viele Zeichen spart ;-)

4voto

Andrew Kozak Punkte 1593

Indem Sie ^ und $ verwenden, stimmen Sie nur überein, wenn das Muster das einzige auf der Zeile ist. Ist das das, was Sie wollen? Wenn ja, verwenden Sie folgendes:

preg_match( '/^user[0-9]{1,8}[^0-9]$/' , $string );

Wenn Sie dieses Muster überall in einer Zeile finden möchten, würde ich versuchen:

preg_match( '/user[0-9]{1,8}[^0-9]/' , $string );

Wie immer sollten Sie ein Referenzwerkzeug wie RegexPal verwenden, um Ihre regulären Ausdrücke isoliert zu testen.

2voto

zessx Punkte 66708

Du warst nah dran, hier ist dein Regex: /^Benutzer[0-9]{1,8}$/

1voto

julesj Punkte 754

Verwenden Sie stattdessen das folgende Regex-Muster:

/^user([0-9]{1,8})$/

1voto

anubhava Punkte 713155

Verwenden Sie dieses Regex:

/^user\d{1,8}$/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X