Soru Verilen bir dizginin nasıl tanımlanması hex renk formatıdır


ASP.NET C # 'da hex renklerini doğrulamak için düzenli bir ifade arıyorum
Ayrıca sunucu tarafında doğrulama için kod arıyorum.

Örneğin: #CCCCCC


44
2017-10-28 10:21


Menşei




Cevaplar:


^#(?:[0-9a-fA-F]{3}){1,2}$

diseksiyon:

^              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

Bu, CSS'de kullanılabilecek rastgele bir onaltılı renk değeriyle eşleşir. #91bf4a veya #f13.

Not: Yine de RGBA hex renk değerleri için destek yok.


104
2017-10-28 10:22



Geçerli renk 3 * 1/2 sanırım olduğunu düşündüm ... bu yüzden / ^ # (?: [0-9a-fA-F] {1,2}) {3} $ / Her iki yöntem de işe yarıyor gibi görünüyor. - Michael Dausmann
@MichaelDausmann: Hayır, seninki 3 ila 6 hex arasında bir şey kabul ediyor. - Joey
@Joey adım açıklama ile adım adım çok yardımcı olur. Teşekkürler - Karim


Diğer çözüm ile küçük anlaşmazlık. diyecektim ki

^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$

Bunun nedeni, bu (doğru) tek tek RGB bileşenlerini yakalamasıdır. Diğer ifade üç parçada kırıldı # 112233, '#' 112 233. Sözdizimi aslında '#' (RR GG BB) | (R G B)

Hafif dezavantaj daha fazla geri dönüş gerektirir. #CCC'yi ayrıştırırken, ikinci C'nin dizenin sonuna gelene kadar yeşil bileşen olduğunu bilmiyorsunuz; #CCCCCC'yi ayrıştırırken, ikinci C'nin 4. C.'yi görene kadar hala kırmızı parçanın bir parçası olduğunu bilmiyorsunuz.


14
2017-10-28 13:33



Bu regex ayrıca # 1234 ve # 12345 ile eşleşir. Bununla birlikte, sadece 3 basamak veya 6 basamak olabilir. Bu RE 3 ila 6 basamak arasında bir şey sağlar. Doğru yapıyı gerçekten yakalamak istiyorsan, kullanmak zorundasın. #([1-9a-fA-F]{3}|[1-9a-fA-F]{6}). Tek tek renk bileşenlerini yakalamak istiyorsanız, daha karmaşık hale gelir (öneriniz bunu yapmaz). - Joey
İkinci düşüncede, haklısın - düzeltmek. - MSalters
Saf validasyon amaçları için (yani, bir değerin aslında mümkün ve doğru olup olmadığı), ancak belirtilmiş olandan değil, dizinin görünen yapısına bakmayı daha kolay buluyorum. En azından bu durumda elde edilen RE daha basittir. - Joey
@MSalters, bu, #FFFF'in son 3 hanesi için bir eşleşme döndürdüğü için hala doğru değil. Ekstra köşeli parantez eklemek: ^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$ onu düzeltir. - Chris
Gerçekten, | arandı bu yüzden aradı ^#FFFFFFF veya FFF$. Sabit. - MSalters


Bu da adlandırılmış renkleri ve rgb (a, b, c) kabul etmek istiyorsanız. Son "i", büyük / küçük harf duyarsızdır.

HTML renkleri (# 123, rgb kabul edilmedi)

/^(#[a-f0-9]{6}|black|green|silver|gray|olive|white|yellow|maroon|navy|red|blue|purple|teal|fuchsia|aqua)$/i

CSS renkleri (# 123, rgb kabul edildi)

/^(#[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

3
2017-11-29 11:36



ama html gibi koyu renkli, açıkgözenekli ve benzer şekilde desteklenen daha fazla renk var - Mendon Ashwini
@MendonAshwini evet. Onlardan 140 tane yeni var. Tüm bunları, regexp'in sonuna yazarak, | - FrancescoMM
evet .. kontrol ettim drafts.csswg.org/css-color-4. Ama onu değiştirmek için otantik yol bu mu? Java herhangi bir kütüphane sağlıyor mu? - Mendon Ashwini


MSalters'ın cevabına dayanan, ancak yanlış eşleşmeyi engelleyen aşağıdaki çalışmalar

^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$

Veya isteğe bağlı bir karma için # sembol:

^#?(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$

Ve geri referanslar oluşturulmadan:

^#?(?:(?:[0-9a-fA-F]{2}){3}|(?:[0-9a-fA-F]){3})$

2
2017-10-09 21:08