Automatische Formatierung im Chili

mit regulären Ausdrücken

plusW GmbH, Lisa Klimovitskaya

Einführung

Wikipedia.de definiert reguläre Ausdrücke folgendermassen:

Ein regulärer Ausdruck (englisch regular expression, Abkürzung RegExp oder Regex) ist in der theoretischen Informatik eine Zeichenkette, die der Beschreibung von Mengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dient

Reguläre Ausdrucke können  im Chili in den Event-Actions implementiert und z.Bsp. für eine optimale Darstellung und bessere Lesbarkeit von Telefonnummern verwendet werden. Zuvor sind aber  ein paar einführende Erklärungen notwendig. Was ist mit den oben erwähnten "Mengen" und "syntaktischen Regeln" gemeint. 

Beginnen wir mit einem einfachen Beispiel: In einer Telefonnummer sollen zwei 00 zu Beginn durch ein + ersetzt werden. Das könnte  man zwar auch mit der replace funktion irgenwie hinbekommen, hier soll es aber um regxp gehen. Dieser ist hier sehr einfach und lautet 

^00   

Das  Caret Zeichen ^   bedeutet beginnt mit (  das Gegenteil ist   $,  "789$"   wäre dann ein String, der mit 789 endet.

Gehen wir weiter, wir suchen einen String, der mit einem Grossbuchstaben beginnt, und von Kleinbuchstaben  gefolgt wird. Dazu benötigen wir also etwas, das Gross- bzw Kleinbuchstaben beschreibt. Der  Begriff dafür ist "Character class", geschrieben wird das  in eckigen Klammern [ ] , Zeichenfolgen können durch einen Bindestrich angegeben werden, Beispiele:

[A-Z]    Grossbuchstaben
[a-z] Kleinbuchstaben
[0-9] Zahlen
[^A-Z] Keine Grossbuchstaben. Ein Caret innerhalb der [] bedeutet Negation.
[AEIOUaeiou] Eine Liste von Buchstaben, hier z.B alle Vokale

^[A-Z][a-z] Der oben gesuchte Ausdruck. Im Einzelnen : ^ Beginnt, [A-Z] Grossbuchstabe, [a-z] Kleinbuchstabe

Nun reicht ja "Beginnt" oder "Endet" nicht immer aus, manchmal  ist es notwendig, Dinge wie  "mindestens Einmal" , " 0  oder   Einmal"  , " 2 bis 4 mal" etc zu beschreiben. Der Fachbegriff hierzu lautet "Quantifizierer".

*  beliebig oft, das kann auch kin mal sein
? 0 oder einmal
+ mindestens einmal
{n} n-mal
{min,max} Mindestens min mal, höchstens max mal
{0,max} 0 oder höchstens max mal

In den folgenden Beispielen werden die Telefonnummern durch Leerzeichen gegliedert und wenn mehrere Leerzeichen eingegeben sind, werden die automatisch gelöscht.

Die Ländervorwahl mit dem Pluszeichen und einem Leerzeichen (die Ländervorwahl für die Schweiz +41) wird als Präfix unter Variable Settings im Chili vordefiniert.

Ein regulärer Ausdruck /^[0-9]/g wird für eine globale Suche verwendet, um alle Zeichen in einer Zeichenfolge zu finden, die KEINE Ziffern sind. 

Ein Zirkumflex ^ bedeutet eine Inversion: eine beliebige KEINE Ziffer.

Mit "replace" Funktion werden dann alle gefundene Zeichen durch den Leerstring ersetzt.


DIN-Norm +XX XX XXXXXXX.

Mithilfe des Ausdrucks (^[0-9]{2})([0-9]*) wird eine DIN 5008 Norm Formatierung erzeugt. Die Ortsvorwahl wird durch ein Leerzeichen von der Hauptnummer extrahiert.


































Beispiel mit Gruppierung in 2-2-3-2-2 Blöcke +XX XX XXX XX XX.

Die Hauptnummer kann in 3er- und 2er-Rufnummernblöcke gruppiert werden. Dies erfolgt mit dem Ausdruck (^[0-9]{2})([0-9]{3})([0-9]{2})([0-9]{1,2})([0-9]*).
Insgesamt werden vier Zahlengruppen extrahiert: die Ortsvorwahl als 2er-Block und die Hauptnummer: 3er-, 2er-, 2er-Block.


































Beispiel mit Gruppierung in 2-4-3-2-2 Blöcke +XX XXXX XXX XX XX

Dies erfolgt mit dem Ausdruck (^[0-9]{4})([0-9]{3})([0-9]{2})([0-9]{1,2})([0-9]*)