सवाल किसी दिए गए स्ट्रिंग को कैसे पहचानें हेक्स रंग प्रारूप है


मैं ASP.NET C # और हेक्स रंगों को हेक्स रंगों को सत्यापित करने के लिए नियमित अभिव्यक्ति की तलाश में हूं
सर्वर पक्ष पर सत्यापन के लिए भी कोड देख रहा हूँ।

उदाहरण के लिए: #CCCCCC


44
2017-10-28 10:21


मूल




जवाब:


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

विच्छेदन:

^              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

यह एक मनमानी हेक्साडेसिमल रंग मान से मेल खाएगा जिसका उपयोग सीएसएस में किया जा सकता है, जैसे कि #91bf4a या #f13

ध्यान दें: हालांकि, आरजीबीए हेक्स रंग मूल्यों के लिए कोई समर्थन नहीं है।


104
2017-10-28 10:22



मैंने सोचा कि वैध रंग 3 * एक 1/2 कॉम्बो था ... तो / ^ # (?: [0-9 ए-एफए-एफ] {1,2}) {3} $ / दोनों तरीके काम करने लगते हैं। - Michael Dausmann
@ माइकल डौसमैन: नहीं, आपका 3 और 6 हेक्स अंकों के बीच कुछ भी स्वीकार करेगा। - Joey
@ जॉय चरण-दर-चरण स्पष्टीकरण के लिए बहुत उपयोगी है। धन्यवाद - Karim


अन्य समाधान के साथ मामूली असहमति। मेरे अनुसार

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

कारण यह है कि यह (सही ढंग से) व्यक्तिगत आरजीबी घटकों को कैप्चर करता है। दूसरी अभिव्यक्ति ने # 112233 को तीन हिस्सों में तोड़ दिया, '#' 112 233. वाक्यविन्यास वास्तव में '#' (आरआर जीजी बीबी) है। (आर जी बी)

मामूली नुकसान अधिक बैकट्रैकिंग की आवश्यकता है। # सीसीसीसी को पार्स करते समय आप नहीं जानते कि दूसरा सी हरा घटक है जब तक कि आप स्ट्रिंग के अंत तक नहीं पहुंच जाते; #CCCCCC को पार्स करते समय आपको नहीं पता कि दूसरा सी अभी भी लाल घटक का हिस्सा है जब तक कि आप चौथा सी नहीं देखते।


14
2017-10-28 13:33



यह रेगेक्स # 1234 और # 12345 से भी मेल खाएगा। हालांकि, केवल 3 अंक या 6 अंक हो सकते हैं। यह आरई 3 और 6 अंकों के बीच कुछ भी अनुमति देता है। यदि आप वास्तव में सही संरचना को पकड़ना चाहते हैं, तो आपको इसका उपयोग करना होगा #([1-9a-fA-F]{3}|[1-9a-fA-F]{6})। यदि आप व्यक्तिगत रंग घटकों को कैप्चर करना चाहते हैं तो यह अधिक जटिल हो जाता है (आपका सुझाव यह भी नहीं करता है)। - Joey
दूसरे विचार पर, आप सही हैं - इसे ठीक करना। - MSalters
शुद्ध सत्यापन उद्देश्यों के लिए (i। ई। क्या कोई मान वास्तव में एक संभावित और सही है) हालांकि, मुझे स्ट्रिंग की स्पष्ट संरचना को देखना आसान है, निर्दिष्ट नहीं है। कम से कम इस मामले में परिणामी आरई सरल है। - Joey
@MSalters यह अभी भी सही नहीं है, क्योंकि यह #FFFF के अंतिम 3 अंकों के लिए एक मैच देता है। ब्रैकेट का एक अतिरिक्त सेट जोड़ना: ^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$ इसे ठीक करता है - Chris
वास्तव में, | ब्रैकेट नहीं किया गया था इसलिए यह देखा गया ^#FFFFFFF या FFF$। फिक्स्ड। - MSalters


यदि आप नामित रंग और आरजीबी (ए, बी, सी) भी स्वीकार करना चाहते हैं। अंतिम "मैं" असंवेदनशील मामले के लिए है।

एचटीएमएल रंग (# 123, आरजीबी स्वीकार नहीं किया गया)

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

सीएसएस रंग (# 123, आरजीबी स्वीकार किया गया)

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



लेकिन एचटीएमएल में अधिक रंग समर्थित हैं जैसे darkturquoise, lightgoldenrodyellow और इसी तरह - Mendon Ashwini
@MendonAshwini हां। उनमें से 140 नए हैं। आप उन्हें regexp के अंत में सभी लिख सकते हैं, द्वारा सीमित - FrancescoMM
हाँ .. मैंने जांच की drafts.csswg.org/css-color-4। लेकिन क्या यह विविधतापूर्ण तरीका है? क्या जावा कोई पुस्तकालय प्रदान करता है? - Mendon Ashwini


MSalters के उत्तर के आधार पर, लेकिन गलत मिलान को रोकने से, निम्नलिखित कार्य करता है

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

या एक वैकल्पिक हैश के लिए # प्रतीक:

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

और बिना संदर्भ के उत्पन्न किए जा रहे हैं:

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

2
2017-10-09 21:08