Na przykład:
AA33FF
= prawidłowy kolor szesnastkowy
Z34FF9
= nieprawidłowy kolor szesnastkowy (zawiera Z)
AA33FF11
= nieprawidłowy kolor szesnastkowy (zawiera dodatkowe znaki)
javascript
jquery
colors
Alex
źródło
źródło
AARRGGBB
formacie.Odpowiedzi:
Opracować:
^ ->
dopasowywanie rozpoczynające# ->
się od skrótu[0-9A-F] ->
dowolna liczba całkowita od 0 do 9 i dowolna litera od A do F{6} ->
poprzednia grupa występuje dokładnie 6 razy$ ->
dopasuj konieci ->
zignoruj wielkość literJeśli potrzebujesz obsługi 3-znakowych kodów HEX, użyj następujących:
Jedyna różnica polega na tym
jest zastępowany przez
Oznacza to, że zamiast dopasować dokładnie 6 znaków, dopasuje dokładnie 3 znaki, ale 1 lub 2 razy. Pozwalając
ABC
iAABBCC
, ale nieABCD
źródło
color: #f00;
zostanie również zinterpretowany jako czerwony (# ff0000)./^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test("#f00")
/^#([0-9a-f]{3}){1,2}$/i
do miksu./^#[0-9A-F]{3,6}$/i.test('#aabb')
również przechodzi, ale#aabb
nie jest prawidłowym kolorem szesnastkowym.Ta odpowiedź generowała fałszywe alarmy, ponieważ zamiast
Number('0x' + hex)
tego używałaparseInt(hex, 16)
.parseInt()
będzie analizować od początku ciągu, aż osiągnie znak, który nie jest zawarty w funkcji radix (16
). Oznacza to, że może analizować łańcuchy, takie jak „AAXXCC”, ponieważ zaczyna się od „AA”.Number()
z drugiej strony, będzie analizować tylko wtedy, gdy cały ciąg pasuje do podstawy. TerazNumber()
nie ma parametru radix, ale na szczęście możesz prefiksować literały liczbowe, aby uzyskać liczbę w innych promieniach.Oto tabela dla wyjaśnienia:
źródło
parseInt
weźmie"abcZab"
, znajdź"Z"
to, co jest nieprawidłowe (dla radix 16) i zignoruj to i wszystko po nim. Następnie bierze początek"abc"
i konwertuje go na2748
(co jest również wynikiemparseInt("abcZab", 16)
udowadniania, że taka logika się dzieje). Jak sama nazwa wskazuje,parseInt
analizuje ciąg. Tak jak gdybyś parsował liczbę z jednostkami o podstawie 10, tak jakparseInt("10px", 10)
, dostaniesz10
. Możesz zobaczyć to opisane tutaj: es5.github.io/#x15.1.2.2 (krok 11)To może być skomplikowany problem. Po kilku próbach wymyśliłem dość czyste rozwiązanie. Pozwól przeglądarce wykonać pracę za Ciebie.
Krok 1: utwórz element div ze stylem obramowania ustawionym na brak. Element DIV może znajdować się poza ekranem lub może to być dowolny element DIV na Twojej stronie, który nie ma obramowań.
Krok 2: Ustaw kolor obramowania na pusty ciąg. Kod może wyglądać mniej więcej tak:
Krok 3: Ustaw kolor obramowania na kolor, którego nie jesteś pewien.
Krok 4: Sprawdź, czy kolor rzeczywiście się zmienił. Jeśli testcol jest nieprawidłowy, nie nastąpi żadna zmiana.
Krok 5: Oczyść się po sobie, ustawiając kolor z powrotem na pusty ciąg.
Div:
Teraz funkcja JavaScript:
W tym przypadku funkcja zwraca prawdziwą / fałszywą odpowiedź na pytanie, inną opcją jest zwrócenie prawidłowej wartości koloru. Oryginalna wartość koloru, wartość z borderColor lub pusty ciąg zamiast nieprawidłowych kolorów.
źródło
Jeśli próbujesz użyć go w HTML Spróbuj użyć tego wzorca bezpośrednio:
lubić
Potwierdzi zgodność z żądanym formatem.
źródło
https://gist.github.com/dustinpoissant/22ce25c9e536bb2c5a2a363601ba261c
Uwaga: wymaga to jQuery
Działa to dla WSZYSTKICH typów kolorów, a nie tylko wartości szesnastkowych. To też ma nie dołączyć zbędnych elementów do drzewa DOM.
źródło
Jeśli potrzebujesz funkcji, która powie ci, czy kolor jest prawidłowy, równie dobrze możesz mieć coś użytecznego - obliczone wartości tego koloru - i zwrócić wartość null, jeśli nie jest to prawidłowy kolor. Oto moja próba znalezienia zgodnej funkcji (Chrome54 i MSIE11), aby uzyskać wartości RGBA „koloru” w dowolnym formacie - czy to „zielony”, „#FFF”, „# 89abcd” lub „rgb” (0,0,128) ”lub„ rgba (0, 128, 255, 0,5) ”.
źródło
Dodaj kontrolę długości, aby upewnić się, że nie otrzymasz fałszywie dodatniego wyniku
}
źródło