주어진 문자열을 식별하는 방법은 16 진수 색상 형식입니다.
ASP.NET C #에서 16 진수 색상의 유효성을 검사하는 정규식
을 찾고 있으며 서버 측에서 유효성 검사를위한 코드도 찾고 있습니다.
예를 들면 : #CCCCCC
^#(?:[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
이는 CSS에서 사용할 수있는 임의의 16 진수 색상 값 (예 : #91bf4a
또는 )과 일치합니다 #f13
.
참고 : RGBA 16 진수 색상 값은 지원하지 않습니다.
다른 솔루션에 약간의 불일치가 있습니다. 나는 말할 것이다
^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$
그 이유는 이것이 (올바르게) 개별 RGB 구성 요소를 캡처하기 때문입니다. 다른 표현식은 '#'112233의 세 부분에서 # 112233을 분리했습니다. 구문은 실제로 '#'(RR GG BB) | (RGB)
약간의 단점은 더 많은 역 추적이 필요하다는 것입니다. #CCC를 구문 분석 할 때 두 번째 C가 문자열의 끝을 찾을 때까지 녹색 구성 요소라는 것을 알 수 없습니다. #CCCCCC를 구문 분석 할 때 두 번째 C가 4 번째 C를 볼 때까지 여전히 빨간색 구성 요소의 일부라는 것을 알 수 없습니다.
이름이 지정된 색상과 rgb (a, b, c)도 허용하려는 경우입니다. 마지막 "i"는 대소 문자를 구분하지 않습니다.
HTML 색상 (# 123, rgb는 허용되지 않음)
/^(#[a-f0-9]{6}|black|green|silver|gray|olive|white|yellow|maroon|navy|red|blue|purple|teal|fuchsia|aqua)$/i
CSS 색상 (# 123, rgb 허용)
/^(#[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
모든 답변은 RGB 형식을 언급했으며 ARGB 형식에 대한 정규식은 다음과 같습니다.
^#[0-9a-fA-F]{8}$|#[0-9a-fA-F]{6}$|#[0-9a-fA-F]{4}$|#[0-9a-fA-F]{3}$
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})$
이것은 어떤 일치해야합니다 #rgb
, #rgba
, #rrggbb
, 및 #rrggbbaa
구문 :
/^#(?:(?:[\da-f]{3}){1,2}|(?:[\da-f]{4}){1,2})$/i
분해 :
^ // 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')
위의 구문은이 구문과 동일 하지 않으며 올바르지 않습니다.
/^#(?:[\da-f]{3,4}){1,2}$/i
이렇게 #1234567
하면 유효한 16 진수 색상이 아닌 과 같이 3 인 그룹과 4 인 그룹이 차례로 허용 됩니다.
루비
Ruby에서는 \h
(16 진수) 문자 클래스에 액세스 할 수 있습니다 . 또한 줄 끝을 더 잘 관리해야하므로 \A...\z
더 일반적인^...$
/\A#(\h{3}){1,2}\z/
이것은 # 다음에 나오는 3 개 또는 6 개의 16 진수 문자와 일치합니다. 따라서 RGBA가 없습니다. i
플래그가 없더라도 대소 문자를 구분하지 않습니다 .
참고 URL : https://stackoverflow.com/questions/1636350/how-to-identify-a-given-string-is-hex-color-format
'developer tip' 카테고리의 다른 글
파이썬 목록과 혼동 : 그것들이 반복자입니까? (0) | 2020.11.14 |
---|---|
ExecutorService를 Java의 데몬으로 전환 (0) | 2020.11.13 |
Rails / Rspec Make 테스트는 http 기본 인증으로 통과합니다. (0) | 2020.11.13 |
git merge의 기본값을 --no-ff --no-commit으로 만들려면 어떻게해야합니까? (0) | 2020.11.13 |
$ (document) .scrollTop ()은 항상 0을 반환합니다. (0) | 2020.11.13 |