| |
|
|
Nico Madysa | Ab XProfan10 gibt es den Befehl Match$, mit dem geprüft wird, ob ein Sting einem bestimmten Muster entspricht, also z.B. zuerst ein Großbuchstabe kommt, dann 3 Kleinbuchstaben, ein Leerzeichen und danach 3 Ziffern. Ich habe hier einiges gesammelt mit einem kleinen Beispielprogramm: KompilierenMarkierenSeparierenDef $Name "[A-ZÄÖÜ]([a-zäöü]+|~.)(~-[A-ZÄÖÜ]([a-zäöü]{2,}|~.))* [A-ZÄÖÜ]([a-zäöü]+|~.)(~-[A-ZÄÖÜ]([a-zäöü]{2,}|~.))*"
Def $Time "((0|1|)[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?"
Def $Vorw "[1-9][0-9]{1,4}"
Def $Telnum "[1-9][0-9]{4,7}"
Def $Url "(https://)?(www~.)?[^@|²³.]{1,}(~.[^@|²³ .]{2,3}){1,3}"
Def $Street "([A-Z][a-z]{2,}~.? )+(0[1-9][0-9]*|[1-9][0-9]*)"
Def $Plz "[0-9]{5} [A-Z][a-z]{2,}"
Def $RoemM "M*"
Def $RoemC "(C[DM]|C[DM]|D?C{0,3})?"
Def $RoemX "(X[LC]|X[LC]|L?X{0,3})?"
Def $RoemI "(I[VX]|I[VX]|V?I{0,3})?"
Declare E& , T& , Roem$ , Addr$ , Tel$ , XTel$
Roem$ = "^" + $Roemm + $Roemc + $Roemx + $Roemi + "$"
Addr$ = "^" + $Name + "(
|[,;] )" + $Street + "(
|[,;] )" + $Plz + "$"
Tel$ = "^(0"+$Vorw+"/)?"+$Telnum+"$"
XTel$ = "^((~+49 ("+$Vorw+"|~(0"+$Vorw+"~))|0049 "+$Vorw+"|~(0049 "+$Vorw+"~)|0"+$Vorw+"|~(0"+$Vorw+"~)) )?"+$Telnum+"$"
+49 30 12345678
+49 (030) 12345678
0049 30 12345678
(0049 30) 12345678
030 12345678
(030) 12345678
12345678
Window 300 , 200 - 200 , 200
Cls External("User32","GetSysColor",15)
E& = Create("MultiEdit",%Hwnd,"",5,05,180,(-20))
T& = Create("Text",%Hwnd,"",5,30,180,160)
Whilenot IsKey(27)
Waitinput
Match$(XTel$,Gettext$(E&))<- Addr$ durch zu testende Konstante/Variable ersetzen
If %Matchpos >= 0
Settext T& , $Match
Else
Settext T& , "ungültig"
Endif
Wend
$Name = Vorname + Nachname Doppelnamen sind mittels Bindestrich möglich $Time = hh:mm oder hh:mm:ss $URL = Internetadresse, z.B. [...] leider auch www.de $Street = Straßenname + Hausnummer, z.B. Str. des Friedens 1 $PLZ = Postleitzahl + Ort, z.B. 02979 Burghammer Roem$ = Römischess Zahlzeichen, z.B. CXVII Addr$ = komplette Adresse, durch Chr$(13), Komma oder Semikolon getrennt. Tel$ = Festnetznummer, auch mit Vorwahl möglich, z.B. 011111/99999 XTel$ = erweiterte Festnetznummer, folgende Formate sind möglich: +49 30 12345678 +49 (030) 12345678 0049 30 12345678 (0049 30) 12345678 030 12345678 (030) 12345678 12345678 Kritik und Meinung sind ausdrücklich erwünscht. |
|
|
| |
|
|
|
Clemens Meier | PLZ immer mit einer 0 beginnend? Schade, meine Stadt wird ausgeschlossen |
|
|
| |
|
|
|
Michael Wodrich | TelefonNr geht nicht: 0451/...
weil[quote:fa121d580d] Capture 0 Any character in 1-9 Exactly 5 times / End Capture ? (zero or one time) Any character in 1-9 Exactly 5 times [/quote:fa121d580d] url geht auch nicht
[quote:fa121d580d]Capture [...] End Capture ? (zero or one time) Capture www~ . (any character) End Capture ? (zero or one time) Any character not in @|²³~~~. + (one or more times) ~ . (any character) Any character not in @|²³~~ At least 2, but not more than 3 times Capture ~ . (any character) Any character not in @|²³~~ At least 2, but not more than 3 times End Capture ? (zero or one time) [/quote:fa121d580d] und so weiter
PLZ
[quote:fa121d580d]0 Any character in 1-9 Exactly 4 times (space) Any character in A-Z Any character in a-z At least 2 times [/quote:fa121d580d] Kontrolliert mit The Regulator - freie Version
[...] [...] |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 10.06.2006 ▲ |
|
|
|
|
Nico Madysa | Also ich bin ja schon mal glücklich, dass bei den römischen Zahlen keine Fehler aufgetaucht sind.(Die haben mich fast in den WAHNSINN getrieben!). [quote:9180e9b2ca] PLZ immer mit einer 0 beginnend? Schade, meine Stadt wird ausgeschlossen [/quote:9180e9b2ca] Sorry, ich bin davon ausgegangen, PLZs begännen grundsätzlich mit einer 0.
[quote:9180e9b2ca] TelefonNr geht nicht: 0451/... [/quote:9180e9b2ca] Das selbe in Grün. In den Minuten des Zusammenschreibens ging ich davon aus, Vorwahlen hätten grundsätzlich 5 Ziffern.(Ich hatte einfach ein Brett vorm Kopf.)
@ Michael: Dein Regulator berücksichtigt nicht, dass in den regülären Ausdrücken von XProfan das Tilde(~) das Escape-Zeichen ist und nicht der Backslash(). Bei mir hat url funktioniert, abgesehen von der Macke, dass auch w w w . d e als URL durchgeht. (Ich habe w w w . d e gesperrt, damit nicht stattdessen dieses [...] angezeigt wird.)
Hier ist jetzt eine überarbeitete Version: KompilierenMarkierenSeparierenDef $Name "[A-ZÄÖÜ]([a-zäöü]+|~.)(~-[A-ZÄÖÜ]([a-zäöü]{2,}|~.))* [A-ZÄÖÜ]([a-zäöü]+|~.)(~-[A-ZÄÖÜ]([a-zäöü]{2,}|~.))*"
Def $Time "((0|1|)[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?"
Def $Tel "(0[1-9][0-9]{2,3}/)?[1-9][0-9]{6}"
Def $Url "(https://)?(www~.)?[^@|²³~~~.]{1,}(~.[^@|²³~~~.]{2,3}){1,3}"
Def $Street "([A-Z][a-z]{2,}~.? )+(0[1-9][0-9]*|[1-9][0-9]*)"
Def $Plz "[0-9]{5} [A-Z][a-z]{2,}"
Def $Roemm "M*"
Def $Roemc "(C[DM]|C[DM]|D?C{0,3})?"
Def $Roemx "(X[LC]|X[LC]|L?X{0,3})?"
Def $Roemi "(I[VX]|I[VX]|V?I{0,3})?"
Declare E& , T& , Roem$ , Addr$
Roem$ = "^" + $Roemm + $Roemc + $Roemx + $Roemi + "$"
Addr$ = "^" + $Name + "(
|[,;] )" + $Street + "(
|[,;] )" + $Plz + "$"
Window 300 , 200 - 200 , 200
Cls External("User32","GetSysColor",15)
E& = Create("MultiEdit",%Hwnd,"",5,05,180,(-20))
T& = Create("Text",%Hwnd,"",5,30,180,160)
Whilenot Iskey(27)
Waitinput
Match$(Addr$,Gettext$(E&))<- Addr$ durch zu testende Konstante/Variable ersetzen
If %Matchpos >= 0
Settext T& , $Match
Else
Settext T& , "ungültig"
Endif
Wend
EDIT: Habe jetzt diesen Beitrag editiert, da ich wegen einem Fehler nicht noch alles nochmal reinstellen wollte. Danke an Clemens für die Richtigstellung meiner Vorstellung von Telefonnummern. ;D |
|
|
| |
|
|
|
Clemens Meier | Schon beim Überfliegen erneut einen Fehler gesehen bei der Telefonnummer. Die Vorwahl 07402 wäre nach deinem Ausdruck nicht möglich.
Richtig, die 0 steht an erster Stelle. an 2. Stelle 1-9, danach Zahlen von 0-9
Musst also den Ausdruck noch etwas erweitern.
Bei dem Hauptanschluß analog, an erster Stelle 1-9, danach Zahlen von 0-9:
Def $Tel (0[1-9]{3,4}/)?[1-9]{5} ist also falsch (und zu kurz hinten, meine passt da schon nicht rein) Richtig oder zum mindest besser: Def $Tel (0[1-9][0-9]{2,3}/)?[1-9][0-9]{6}
Weitere mögliche Fehler dürfen nun auch andere suchen |
|
|
| |
|
|
|
| Folgende Angabemöglichkeiten für Telefonnummern sind typisch:
Ich nehme jetzt mal die Berliner Vorwahl 030
+49 30 12345678 +49 (030) 12345678 0049 30 12345678 (0049 30) 12345678 030 12345678 (030) 12345678 12345678
Oft genutzte Sonderzeichen in Teleangaben sind +-()[] /. |
|
|
| |
|
|
|
Clemens Meier | Die 4. Variante kannte ich nicht. Aber insgesamt ein guter Ansatz um einen kompletten Ausdruck zu formulieren. |
|
|
| |
|
|
|
| [quote:926ddf29a9=Clemens Meier]Die 4. Variante kannte ich nicht. Aber insgesamt ein guter Ansatz um einen kompletten Ausdruck zu formulieren.[/quote:926ddf29a9] Du hast schon recht - die 4. Variante ist eher selten, aber vorhanden: [...] |
|
|
| |
|
|
|
RGH | Außerdem setzt sich immer mehr die internationale Schreibweise mit Bindestrich durch:
+49-30-1234567 +4930-1234567
oder gar ohne alle Trennzeichen (wird gerne auch bei Handynummern verwandt):
+49301234567
Nicht zu vergessen die Versionen mit 00 statt +.
Am besten sollte man Leerzeichen, Bindestriche und Klammern einfach ausfiltern. Es könnten ja bei Nenenstellenanlagen noch weitere Bestandteile folgen:
+49-30-123456-78
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 12.06.2006 ▲ |
|
|
|
|
Michael Wodrich | Habe beim Regulator wohl nicht konvertiert??!?
Aber das kann man ja von Hand nachholen. Bei der Prüfung fällt übrigens auf, das man nicht mit den runden Klammern so herumwerfen sollte. Die haben nämlich eine ganz klare eigene Funktion.
Die regulären Ausdrücke also bitte ohne die runden Klammern.
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 13.06.2006 ▲ |
|
|
|
|
Clemens Meier | [quote:3a4ca13962=Michael Wodrich] Die regulären Ausdrücke also bitte ohne die runden Klammern. [/quote:3a4ca13962] Verstehe ich nicht, wie kann man reguläre Ausdrücke ohne runde Klammern erstellen. Die sind ein absolutes Muss um sogenannte Subpattern zu bilden. |
|
|
| |
|
|
|
Michael Wodrich | Richtig, der Name fiel mir nicht so schnell ein... |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 13.06.2006 ▲ |
|
|
|