Archiv verlassen und diese Seite im Standarddesign anzeigen : ID Nummer aus Zahlen und Buchstaben
Zinksalbe
03.03.2005, 12:46
Hallo,
ich versuche mich seit gestern bei einem Regex für folgenden zb. Muster, welches aus genau 9 Zeichen und maximal vier Zahlen besteht:
63D7OXBE1
Mein Versuche waren wie folgt:
[A-Z0-9]{9}
macht aber leider auch ATJIEJDEW
([A-Z0-9]{9})\d{1,4}\1
geht auch nicht.
Hat jemand ein Tip für mich?
Jan Krüger
03.03.2005, 12:53
Schwer bis unmöglich. Statt dich mit einem regulären Ausdruck dafür rumzuquälen, würde ich einfach eine Prüffunktion dafür schreiben.
Zinksalbe
03.03.2005, 13:03
Hammerhart :(
Schade, das wird dann echt auf die Rechenzeit gehen, da mehrere ganze gescannte DIN A4 Blätter überprüft werden müssen.
Jan Krüger
03.03.2005, 13:33
Eine Prüffunktion ist garantiert schneller als ein regulärer Ausdruck.
Mit ([A-Z]*[0-9]?){4}[A-Z]* hast du eine Zeichenkette, die neben Buchstaben maximal vier Ziffern enthält. Ob die Zeichenkette jetzt neun Zeichen lang ist, kannst du damit nicht feststellen. Dafür könntest du deinen ersten Versuch verwenden.
Zinksalbe
03.03.2005, 13:53
Hmm,
also das findet irgendwie auch Zeilenumbrüche oder sowas.
Zeilenumbrüche sollten damit auf alle Fälle nicht erkannt werden. Vielleicht gibt es ein Problem mit dem "Escapen" spezieller Symbole? Unter meiner Bash 2.05b musste ich:
$ echo ADE45EE33VIELZUVIELEZEICHEN | sed -e "s/\([A-Z]*[0-9]\?\)\{4\}[A-Z]*/BOINK/"
schreiben um mein BOINK zu bekommen. Die runden und geschweiften Klammern sowie das Fragezeichen musste ich mit dem Backslash escapen.
Alles Befehlsspezifisch. Was wichtig ist, ist die Idee: bis zu viermal eine beliebig lange Buchstabenfolge gefolgt von einer (optionalen) Zahl; gefolgt von einer beliebig langen Buchstabenfolge. Das Fragezeichen ist eigentlich nicht nötig.
ich versuche mich seit gestern bei einem Regex für folgenden zb. Muster, welches aus genau 9 Zeichen und maximal vier Zahlen besteht:
63D7OXBE1
Mein Versuche waren wie folgt:
[A-Z0-9]{9}
macht aber leider auch ATJIEJDEW
([A-Z0-9]{9})\d{1,4}\1
geht auch nicht.
Ersteres ist schon mal ein guter Ansatz, zweiteres ist irgendwie komplett in eine falsche Richtung.... Ich würde es mit zwei Matches machen, dem ersten von dir (wobei du ihn in ^$ einschließen solltest, um wirklich nur das zu bekommen und es nicht auch auf z.B. 12 Zeichen matchen zu lassen) und als zweiten ^([A-Z]*[0-9]){4}[A-Z]*$ arbeiten. Wenn beide matches passen, dann stimmt auch dein Wert.
MfG,
Alfie
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.