Ich suche nach einem regulären Ausdruck zum Überprüfen von Hex-Farben in ASP.NET C # und
suche auch nach Code für die Überprüfung auf der Serverseite.
Zum Beispiel: #CCCCCC
^#(?:[0-9a-fA-F]{3}){1,2}$
Präparation:
^ anchor for start of string
# the literal #
( start of group
?: indicate a non-capturing group that doesn't generate backreferences
[0-9a-fA-F] hexadecimal digit
{3} three times
) end of group
{1,2} repeat either once or twice
$ anchor for end of string
Dies entspricht einem beliebigen hexadezimalen Farbwert, der in CSS verwendet werden kann, z. B. #91bf4a
oder #f13
.
Hinweis: RGBA-Hex-Farbwerte werden jedoch nicht unterstützt.
Kleinere Meinungsverschiedenheiten mit der anderen Lösung. ich würde sagen
^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$
Der Grund ist, dass dies (korrekt) die einzelnen RGB-Komponenten erfasst. Der andere Ausdruck hat # 112233 in drei Teile geteilt: '#' 112 233. Die Syntax lautet tatsächlich '#' (RR GG BB) | (RGB)
Der leichte Nachteil ist, dass mehr Backtracking erforderlich ist. Wenn Sie #CCC analysieren, wissen Sie nicht, dass das zweite C die grüne Komponente ist, bis Sie das Ende der Zeichenfolge erreicht haben. Wenn Sie #CCCCCC analysieren, wissen Sie nicht, dass das zweite C immer noch Teil der roten Komponente ist, bis Sie das 4. C sehen.
quelle
#([1-9a-fA-F]{3}|[1-9a-fA-F]{6})
. Wenn Sie die einzelnen Farbkomponenten erfassen möchten, wird dies komplexer (Ihr Vorschlag tut dies auch nicht).^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$
Behebt das Problem.|
nicht in Klammern, also suchte es nach^#FFFFFFF
oderFFF$
. Fest.([0-9a-fA-F]{2}){3}
gleichbedeutend mit[0-9a-fA-F]{6}
?Dies ist der Fall, wenn Sie benannte Farben und RGB (a, b, c) akzeptieren möchten. Das letzte "i" unterscheidet zwischen Groß- und Kleinschreibung.
HTML-Farben (# 123, RGB nicht akzeptiert)
/^(#[a-f0-9]{6}|black|green|silver|gray|olive|white|yellow|maroon|navy|red|blue|purple|teal|fuchsia|aqua)$/i
CSS-Farben (# 123, RGB akzeptiert)
/^(#[a-f0-9]{6}|#[a-f0-9]{3}|rgb *\( *[0-9]{1,3}%? *, *[0-9]{1,3}%? *, *[0-9]{1,3}%? *\)|rgba *\( *[0-9]{1,3}%? *, *[0-9]{1,3}%? *, *[0-9]{1,3}%? *, *[0-9]{1,3}%? *\)|black|green|silver|gray|olive|white|yellow|maroon|navy|red|blue|purple|teal|fuchsia|aqua)$/i
quelle
Alle Antworten erwähnt RGB-Format, hier ist Regex für ARGB-Format:
^#[0-9a-fA-F]{8}$|#[0-9a-fA-F]{6}$|#[0-9a-fA-F]{4}$|#[0-9a-fA-F]{3}$
quelle
Basierend auf der Antwort von MSalters, aber um eine falsche Übereinstimmung zu verhindern, funktioniert Folgendes
^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$
Oder für einen optionalen Hash
#
Symbol:^#?(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$
Und ohne dass Rückverweise generiert werden:
^#?(?:(?:[0-9a-fA-F]{2}){3}|(?:[0-9a-fA-F]){3})$
quelle
Rubin
In Ruby haben Sie Zugriff auf die
\h
(hexadezimale) Zeichenklasse. Sie müssen sich auch mehr um Zeilenenden kümmern, daher die\A...\z
häufigeren^...$
/\A#(\h{3}){1,2}\z/
Dies entspricht 3 oder 6 hexadezimalen Zeichen nach einem #. Also keine RGBA. Es ist auch unabhängig von Groß- und Kleinschreibung, obwohl die
i
Flagge nicht vorhanden ist.quelle
/\H/
die nicht hexa Zeichen übereinstimmen, so dass Sie nur die boolean haben zu negieren (0 nicht hexa Zeichen von regex gefunden: es gilt Hexa - Nummer) ab:!"FF000"[/\H/] # true
,!"hello"[/\H/] # false
Dies sollte passen alle
#rgb
,#rgba
,#rrggbb
, und#rrggbbaa
Syntax:/^#(?:(?:[\da-f]{3}){1,2}|(?:[\da-f]{4}){1,2})$/i
Nervenzusammenbruch:
^ // start of line # // literal pound sign, followed by (?: // either: (?: // a non-capturing group of: [\da-f]{3} // exactly 3 of: a single digit or a letter 'a'–'f' ){1,2} // repeated exactly 1 or 2 times | // or: (?: // a non-capturing group of: [\da-f]{4} // exactly 4 of: a single digit or a letter 'a'–'f' ){1,2} // repeated exactly 1 or 2 times ) $ // end of line i // ignore case (let 'A'–'F' match 'a'–'f')
Beachten Sie, dass das oben Gesagte dieser Syntax nicht entspricht, was falsch ist:
/^#(?:[\da-f]{3,4}){1,2}$/i
Dies würde eine Gruppe von 3 ermöglichen, gefolgt von einer Gruppe von 4, z. B.
#1234567
was keine gültige Hex-Farbe ist.quelle