Regex für eine gültige Farbangabe

redX

Erfahrenes Mitglied
Ich möchte mit einem Regex überprüfen ob eine gülite Farbangabe gemacht wurde.

Code:
if(preg_match("%[\dabcdef]{6,6}%i", $string))

es sollte den String absuchen nach zeigen von 0-9 und a-f. Es darf aber nur 6 Zeichen haben.

Der Regex oben motzt wenn es weniger als 6 Zeichen hat sowie wenn ein ungültiges Zeichen darin vorkommt. Aber es ist möglich mehr als 6 Zeichen einzugeben. Kann mir wer sagen wie ich ihn abändern muss damit man nur 6 Zeichen eingeben kann?

;)
 
Er muss doch auch motzen, wenn ein nicht valides Zeichen eingegeben wird :confused:
Wenn du auch Eingaben mit weniger als 6 Zeichen zusallen willst, was z.B. für die Verkürzte Schreibweise #CCC ( = #CCCCCC) evtl. sinnvoll ist, dann musst du halt {min.,6} angeben. Wenn du nur Längen von 6 zulassen willst, dann reicht auch ein {6}.
 
Mit einem {6} sucht er nach 6 Zeichen oder mehr. Wenn man aber 7ben eingibt sollte das einen Fehler geben (Das "#" Zeichen wird nicht dazugezählt). Bei {6} ist dies jedoch nicht der Fall. Ich dachte eben mit {6,6}, also min. 6 und max. 6 sei das so in ordnung. Aber anscheinend nicht.
Ich habe nicht abgefangen wenn man weniger als 6 Zeichen enigibt. Deshalb mache ich es lieber so das man 6 Zeichen eingeben muss.
Kannst mir jemand sagen was für ein Regex dazu nötig ist?


Er muss doch auch motzen, wenn ein nicht valides Zeichen eingegeben wird :confused:
Wenn jemand zum Beispiel 00gfff eingibt sollte dass einen Fehler geben.
 
Ich bin mir eigentlich ziemlich sicher, dass {6} für genau sechs Zeichen steht und {6,} für sechs oder mehr zeichen.

Mit deiner Charakterklasse, sollte er bei einem g im Code eigentlich schon mosern. Verstehe also nicht, wo da das Problem liegen soll?
 
re> /\d{10}/
data> 48957
No match
data> 4373648735683467
0: 4373648735
data> foo134frrf324234bla1234567890jonv
0: 1234567890

Dies habe ich gefunden auf:
http://tut.php-q.net/regex.html#f3

Es gibt bei mehr als 10 Zeichen keinen Fehler aus, sondern nur die 10 ersten zeichen. Das ist aber nicht richtig so.

Wenn jemand nun zum Beispiel in meinem Fall 123456k eingibt wird das als richtig gewährtet da es 6 Zeichen hat und das k am schluss, was ja keine gültige eingabe ist wird eifach ignoriert.
 
Aber hast du eine Ahnung wie es dann richtig sein könnte?
Und wiso das es mit {6,6} nicht funktioniert?
 
Hilft es vielleicht, wenn du in deinem Pattern angibst, welche Zeichen vor und nach dem Hex-Wert der Farbe kommen sollen oder funktioniert das auf Grund deines zu durchsuchenden Strings nicht? Wenn die Farben alleine stehen, dann würden vielleicht auch ^ und $ für Anfang und Ende der Zeichenkette helfen.
Wenn du uns die Umstände deiner Funktion offenbarst, dann sprudeln vielleicht ein paar Ideen, wie das Pattern modifiziert werden könnte.
Ich stehe nämlich auch gerade auf dem Schlauch, was dein Problem angeht :(
 
Zurück