Ernst: RegExp gesucht

Ich brauche mal wieder die Hilfe von RegExperten:

Es geht in diesem Fall um die Analyse einer Telefonnummer mit folgendem Aufbau:

Vorwahl und Anschluss sind vorgegeben, die Durchwahl ist durch ein Leerzeichen abgesetzt und muss aus mindestens einer und maximal vier Ziffern bestehen.

Beispiel:

04103/623 1
04103/623 12
04103/623 123
04103/623 1234

Die Nummer kann beliebig durch Leerzeichen und Trennzeichen formatiert eingegeben werden.

Auf die erste Null und die Durchwahl soll im weiteren Verlauf über "reg.exec" zugegriffen werden, deshalb die runden Klammern. Mein RegExp lautet:

reg = /^(0) \D* 4 \D* 1 \D* 0 \D* 3 \D* 6 \D* 2 \D* 3 \D* ( \d \D* \d* \D* \d* \D* \d* )$/;

Problem ist die Durchwahl:

Akzepiert wird jetzt auch eine mehr als vierstellige Durchwahl - es fehlt also eine Begrenzung wie {1,4}. Habe so ziemlich alles ausprobiert - denke ich ... :-\

Frage:

Wie muß ich mein RegExp ändern, damit für die Durchwahl die Regel "einstellig bis maximal vierstellig, beliebig durch Trennzeichen formatierbar" gilt ?

Mfg Ernst

  1. Ich brauche mal wieder die Hilfe von RegExperten:

    Es geht in diesem Fall um die Analyse einer Telefonnummer mit folgendem Aufbau:

    Vorwahl und Anschluss sind vorgegeben, die Durchwahl ist durch ein Leerzeichen abgesetzt und muss aus mindestens einer und maximal vier Ziffern bestehen.

    Beispiel:

    04103/623 1
    04103/623 12
    04103/623 123
    04103/623 1234

    Die Nummer kann beliebig durch Leerzeichen und Trennzeichen formatiert eingegeben werden.

    Das würde erstmal normalisieren, am besten beides entfernen, dann hast du nur Ziffern das dürfte einfacher sein.

    In etwa so
    /04103/623\d{1,4}/

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. In etwa so
      /04103/623\d{1,4}/

      Der slash muss natürlich maskiert werden.

      /04103/623\d{1,4}/

      Struppi.

      --
      Javascript ist toll (Perl auch!)
  2. Lieber Ernst,

    04103/623 1
    reg = /^(0) \D* 4 \D* 1 \D* 0 \D* 3 \D* 6 \D* 2 \D* 3 \D* ( \d \D* \d* \D* \d* \D* \d* )$/;

    ich vermute einmal sowas:
    reg = new RegExp(/^\((0|\+49)\) ?4 ?1 ?0 ?3 ?\/ ?6 ?2 ?3 ?(\d ?){1,4}$/, "gi");

    Ich muss aber dazusagen, dass ich diese {1,4} noch nie ausprobiert habe...

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Jetzt hab ich's doppelt gemoppelt...

      reg = new RegExp("^\((0|\+49)\) ?4 ?1 ?0 ?3 ?/ ?6 ?2 ?3 ?(\d ?){1,4}$", "gi");
      oder natürlich
      reg = /^\((0|\+49)\) ?4 ?1 ?0 ?3 ?\/ ?6 ?2 ?3 ?(\d ?){1,4}$/;

      Vielleicht sollte man die erste Klammer wieder "vergessen"...

      reg = new RegExp("^\((?:0|\+49)\) ?4 ?1 ?0 ?3 ?/ ?6 ?2 ?3 ?(\d ?){1,4}$", "gi");
      oder natürlich
      reg = /^\((?:0|\+49)\) ?4 ?1 ?0 ?3 ?\/ ?6 ?2 ?3 ?(\d ?){1,4}$/;

      Liebe Grüße aus Ellwangen,

      Felix Riesterer.

  3. gudn tach!

    Auf die erste Null und die Durchwahl soll im weiteren Verlauf über "reg.exec" zugegriffen werden, deshalb die runden Klammern. Mein RegExp lautet:

    reg = /^(0) \D* 4 \D* 1 \D* 0 \D* 3 \D* 6 \D* 2 \D* 3 \D* ( \d \D* \d* \D* \d* \D* \d* )$/;

    wie waer's damit:

    reg = /^(0)\D*4103\D*623\D*((?:\d\D*){1,4})$/;

    allerdings weiss ich nicht, ob die verschiedenen js mit (?:foo) klarkommen.

    prost
    seth