Sebagai contoh:
AA33FF
= warna hex yang valid
Z34FF9
= warna hex tidak valid (memiliki Z di dalamnya)
AA33FF11
= warna hex tidak valid (memiliki karakter tambahan)
javascript
jquery
colors
Alex
sumber
sumber
AARRGGBB
format.Jawaban:
Untuk menguraikan:
^ ->
cocok memulai# ->
hash[0-9A-F] ->
bilangan bulat apa pun dari 0 hingga 9 dan huruf apa pun dari A hingga F{6} ->
grup sebelumnya muncul tepat 6 kali$ ->
cocok dan akhirii ->
abaikan kasusJika Anda memerlukan dukungan untuk kode HEX 3 karakter, gunakan yang berikut ini:
Satu-satunya perbedaan di sini adalah itu
diganti dengan
Artinya, alih-alih mencocokkan persis 6 karakter, ini akan cocok persis dengan 3 karakter, tetapi 1 atau 2 kali. Mengizinkan
ABC
danAABBCC
, tetapi tidakABCD
sumber
color: #f00;
akan diinterpretasikan sebagai merah (# ff0000) juga./^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test("#f00")
/^#([0-9a-f]{3}){1,2}$/i
ke dalam campuran./^#[0-9A-F]{3,6}$/i.test('#aabb')
juga lolos, tetapi#aabb
bukan warna hex yang valid.Jawaban ini digunakan untuk membuang positif palsu karena alih-alih
Number('0x' + hex)
, itu digunakanparseInt(hex, 16)
.parseInt()
akan mengurai dari awal string hingga mencapai karakter yang tidak termasuk dalam radix (16
). Artinya, ia dapat mengurai string seperti 'AAXXCC', karena dimulai dengan 'AA'.Number()
, di sisi lain, hanya akan mengurai jika seluruh string cocok dengan radix. Sekarang,Number()
tidak mengambil parameter radix, tapi untungnya, Anda bisa mengawali literal angka untuk mendapatkan angka di jari-jari lain.Berikut tabel klarifikasi:
sumber
parseInt
akan mengambil"abcZab"
, menemukan yang"Z"
tidak valid (untuk radix 16), dan mengabaikannya dan apa pun setelahnya. Ini kemudian mengambil awal"abc"
dan mengubahnya menjadi2748
(yang juga merupakan hasil dariparseInt("abcZab", 16)
, membuktikan bahwa logika terjadi). Sesuai namanya,parseInt
parsing string. Sama seperti jika Anda mengurai angka dengan unit di atasnya dengan akar 10parseInt("10px", 10)
, Anda akan mendapatkan10
. Anda dapat melihatnya dijelaskan di sini: es5.github.io/#x15.1.2.2 (langkah 11)Ini bisa menjadi masalah yang rumit. Setelah beberapa kali mencoba, saya menemukan solusi yang cukup bersih. Biarkan alis yang bekerja untuk Anda.
Langkah 1: Buat div dengan gaya batas disetel ke tidak ada. Div dapat diposisikan di luar layar atau bisa juga div apa pun di halaman Anda yang tidak menggunakan batas.
Langkah 2: Atur warna perbatasan menjadi string kosong. Kode tersebut mungkin terlihat seperti ini:
Langkah 3: Atur warna perbatasan ke warna yang tidak Anda yakini.
Langkah 4: Periksa apakah warnanya benar-benar berubah. Jika testcol tidak valid, tidak akan terjadi perubahan.
Langkah 5: Bersihkan sendiri dengan mengatur warna kembali ke string kosong.
Div:
Sekarang fungsi JavaScript:
Dalam kasus ini, fungsi mengembalikan jawaban benar / salah untuk pertanyaan, opsi lainnya adalah mengembalikan nilai warna yang valid. Nilai warna asli Anda, nilai dari borderColor atau string kosong menggantikan warna yang tidak valid.
sumber
Jika Anda mencoba menggunakannya dalam HTML Coba gunakan pola ini Secara Langsung:
Suka
Ini akan memberikan validasi untuk mencocokkan format yang diminta.
sumber
https://gist.github.com/dustinpoissant/22ce25c9e536bb2c5a2a363601ba261c
Catatan: Ini membutuhkan jQuery
Ini berfungsi untuk SEMUA jenis warna bukan hanya nilai hex. Itu juga tidak menambahkan elemen yang tidak perlu ke pohon DOM.
sumber
Jika Anda memerlukan fungsi untuk memberi tahu Anda apakah suatu warna valid, Anda mungkin juga membuatnya memberikan sesuatu yang berguna - nilai yang dihitung dari warna tersebut - dan mengembalikan null jika warna tersebut bukan warna yang valid. Inilah tusukan saya pada fungsi (Chrome54 & MSIE11) yang kompatibel untuk mendapatkan nilai RGBA dari "warna" dalam format apa pun - baik itu 'hijau', atau '#FFF', atau '# 89abcd', atau 'rgb (0,0,128) ', atau' rgba (0, 128, 255, 0,5) '.
sumber
Tambahkan pemeriksaan panjang untuk memastikan Anda tidak mendapatkan hasil positif palsu
}
sumber