• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Regulärer Ausdruck

rethus

Advanced Hacker
ch möchte eine Abfrage erstellen, ob die Telefonnummer im richtigen Format vorliegt.

Zitat:
Code:
Das Format soll so sein:
+49 01234 123456

Dabei soll das + an erster Stelle geprüft werden, und das nach der 3. Stelle ein Leerzeichen kommt.
Danach soll eine Anzahl von n nummern folgen, wonach dann wieder ein leerzeichen folgt.
Nach dem Leerzeichen dann wieder eine Anzahl von n nummern.

Bisher habe ich diesen Ausdruck... komm aber nicht weiter:
Code:
Code:
/^\+\d{2} +( \d*)?\d$/
 

abgdf

Guru
Hi,

wie Du weißt, benutz ich Python :p .

Bitte folgendes Skript als "numtest.py" speichern, "chmod +x numtest.py" ausführen und mit

Code:
./numtest "+49 12d33 322"

testen:

Code:
#!/usr/bin/env python

import sys
import sre

if len(sys.argv) < 2:
    print
    print "Nothing to test."
    print
    sys.exit()

a = sys.argv[1]

if len(a) < 5:
    print
    print "Number too short."
    print
    sys.exit()

if a[0] != "+":
    print
    print 'No "+" at beginning.'
    print
    sys.exit()

if a[3] != " ":
    print
    print "No space after country-code."
    print
    sys.exit()

a = a[5:]

if a.find(" ") == -1:
    print
    print "No space after city-code."
    print
    sys.exit()

b = a.split(" ")

if sre.search("[^0-9]", b[0]) != None:
    print
    print "Something else than a number found in city-code."
    print
    sys.exit()

if sre.search("[^0-9]", b[1]) != None:
    print
    print "Something else than a number found in local-code."
    print
    sys.exit()

print
print "This is a valid phone-number."
print

Ist Python nicht cool ?

Viele Grüße
 

WernerS

Newbie
Wie wärs mit:

Code:
/^\+[0-9][0-9] [0-9]+ [0-9]+$/

Also praktisch erprobt:

Code:
echo "+49 01234 123456" | grep -E "^\+[0-9][0-9] [0-9]+ [0-9]+$"

+49 01234 123456 => OK
+497 01234 123456 => Nicht OK
+49 012345123456 => Nicht OK

Vielleicht nicht so elegant wie das ursprüngliche Skript, dafür scheint's zu funktionieren! :wink:

Werner
 
WernerS schrieb:
Wie wärs mit:
Code:
/^\+[0-9][0-9] [0-9]+ [0-9]+$/
Und wieso machst du aus [0-9] nicht \d?
+49 01234 123456 => OK
+497 01234 123456 => Nicht OK
+49 012345123456 => Nicht OK
Vielleicht nicht so elegant wie das ursprüngliche Skript, dafür scheint's zu funktionieren! :wink:
Werner
Das ist Müll. Gültige Landesvorwahlen sind nicht nur zweistellig, sondern /\d{1,3}/.
 

WernerS

Newbie
jengelh schrieb:
Und wieso machst du aus [0-9] nicht \d?

Nicht alle Werkzeuge bzw. Implementationen unterstützen obige Notation. Sowohl das auf meinem System vorhandene "grep", als auch "sed" verstehen diese Darstellung nicht.

jengelh schrieb:
Das ist Müll. Gültige Landesvorwahlen sind nicht nur zweistellig, sondern /\d{1,3}/.

Die Landesvorwahl war schon im ersten Posting als zweistellig vorgegeben und wurde von Dir auch nicht in Deinem vorhergehenden Beitrag verbessert.
Jedenfalls finde ich "Müll" eine nette Bezeichnung für eine versuchte Hilfeleistung. Danke nochmals!
 
Oben