Frage

Wie erstellt man einen regulären Ausdruck für eine bestimmte Zeichenfolge?Und können Sie das in der Assertion (vorausgesetzter Teil des Codes) tun?

Ich habe herumgegoogelt, konnte aber nichts Überzeugendes finden.

Die Frage ist so:

Fügen Sie der Erstellungsprozedur DEPARTMENT (der Klasse, an der wir arbeiten) eine Vorbedingung hinzu, die sicherstellt, dass die Telefonnummer gültig ist.Es gibt drei mögliche gültige Telefonnummernformate.Eine gültige Telefonnummer besteht aus einem von:

  • acht Ziffern, von denen die erste ungleich Null ist
  • Eine führende Null, ein einzelner zweistelliger Vorwahlkodex von ungleich Null und dann acht Ziffern, von denen der erste ungleich Null ist
  • Ein führender '+', gefolgt von einem zweistelligen Landcode, dann einem einzigen zweistelligen Vorwahl und dann acht Ziffern, von denen die erste ungleich Null ist

Bei der Validierung einer Telefonnummer sind alle eingebetteten Leerzeichen zu ignorieren.

Es ist akzeptabel, aber nicht erforderlich, um das System als Teil der Lösung dieses Problems eine Telefon -Number -Klasse hinzuzufügen.

War es hilfreich?

Lösung

Es sind verschiedene Fragen zu beantworten:

  1. Wie überprüfe ich, ob eine bestimmte Zeichenfolge mit einem angegebenen regulären Ausdruck in Eiffel übereinstimmt?Man kann eine Klasse verwenden RX_PCRE_MATCHER aus der Gobo-Bibliothek.Das Merkmal compile Ermöglicht das Festlegen des erforderlichen regulären Ausdrucks und der Funktion recognizes Ermöglicht das Testen, ob die Zeichenfolge mit ihr übereinstimmt.

  2. Wie schreibe ich einen regulären Ausdruck für die angegebene Telefonnummernspezifikation?Etwas wie "(|0[1-9]|\+[0-9]{2}[1-9])[1-9][0-8]{7}" sollte tun, obwohl ich es nicht überprüft habe.Es ist möglich, dazwischenliegende Leerzeichen im regulären Ausdruck selbst zu berücksichtigen, aber es ist viel einfacher, sie zu entfernen, bevor sie durch Anwenden an den Matcher für reguläre Ausdrücke übergeben werden prune_all (' ') auf der Eingabezeichenfolge.

  3. Wie füge ich einer Erstellungsprozedur eine Vorbedingung hinzu, um zu überprüfen, ob das Argument diese erfüllt?Nehmen wir an, dass wir aus den vorherigen Elementen eine Funktion konstruiert haben is_phone_number das dauert eine STRING und gibt a zurück BOOLEAN Dies gibt an, ob die angegebene Zeichenfolge eine gültige Telefonnummer darstellt.Eine einfache Lösung wäre das Schreiben

    make (tel: STRING)
        require
            is_phone_number (tel)
        ...
    

    und eine Funktion haben is_phone_number in der Klasse DEPARTMENT selbst.Dies hindert uns jedoch daran, vor dem Aufruf dieser Erstellungsprozedur zu prüfen, ob die angegebene Zeichenfolge eine Telefonnummer darstellt.Es macht also Sinn, umzuziehen is_phone_number zur Klasse PHONE_NUMBER_VALIDATOR diese Klasse DEPARTMENT wird erben.Ebenso, wenn PHONE_NUMBER Muss die Zeichenfolge anhand der angegebenen Regeln validieren, kann sie erben PHONE_NUMBER_VALIDATOR und die Funktion wiederverwenden is_phone_number.

Andere Tipps

Halikal hat das tatsächlich herausgearbeitet, aber dud teile bis jetzt nicht ...

Dies funktioniert in Eiffelstudio 6.2 (Hinweis - das ist Gobo)

http://se.inf.ethz.ch/alt / leute / leitner / gobo_guidelines / naming_conventions.html

Eine gültige Telefonnummer besteht aus einem von:

  • acht Ziffern, der erste davon nicht-Null
  • ein führender Null, ein einzelner nicht nullstelliger Bereichscode, und dann acht Ziffern, der erste davon nicht-Null
  • ein führendes + gefolgt von einem zweistelligen Ländercode, dann ein einzelner nicht-Null-Ziffern-Bereichcode und dann acht Ziffern, der erste davon ist nicht-null

    Alle eingebetteten Räume sind beim Bestätigen einer Telefonnummer zu ignorieren. generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top