###. ###. #### 패턴 일치를 시행하기위한 제한 조건 점검


11

멀티 파트 코드 에이 정규식 패턴을 적용하는 검사 제한 조건을 갖고 싶습니다.

^\d{3}\.\d{3}\.\d{4}$

... 세 개의 숫자, 마침표, 세 개의 숫자, 마침표, 네 개의 숫자.

패턴 일치를 적용하기 위해 CLR 함수를 작성해야합니까? DLR에서 CLR 함수를 참조 할 수 있습니까?

?를 사용하여 다른 방법으로 패턴을 적용하는 방법이 LIKE있습니까?

답변:


16

귀하의 질문에 나오는 정규식이 완전히 모호한 것은 아닙니다.

유니 코드를 지원하는 대부분의 특징에서 \ d는 모든 스크립트의 모든 숫자를 포함합니다. Java, JavaScript 및 PCRE는 예외입니다. 이러한 유니 코드 특징은 \ d와 함께 ASCII 숫자 만 일치합니다.

그래서 많은 풍미에서 그것은 일치 할 것입니다 ١١١.١١١.١١١١(그 캐릭터는 아랍어-인도어 Digit One입니다 )

라틴어와 일치시키고 싶다고 가정합니다 0-9. 당신이 사용할 수있는

DECLARE  @T TABLE
(
Col CHAR(12) CHECK (
                   Col LIKE REPLACE('ddd.ddd.dddd','d','[0-9]') 
                                  COLLATE Latin1_General_100_BIN2
                   )
)

바이너리 collate 절을 사용하므로 문자열 이 검사 와 같 ¾¾¾.¾¾¾.¾¾¾¾거나 10².10².1000통과하지 않습니다 ( 일부 collation에서 발생할 수 있음 ).

이들 중 어느 것도 원하는 CLR 정규 표현식과 일치 하지 않으며 [0123456789]범위 구문 ( [0-9]) 대신 세트 구문 ( )을 사용하더라도 2일치 여부에 관계없이 데이터 정렬에 여전히 영향을받는 첫 번째 구문을 해결합니다 ².

패턴을 확인하는 것이 더 읽기 쉽기 때문에 패턴을 REPLACE하드 코딩하는 대신 사용 LIKE하고 있습니다. 파싱하는 것보다 3 자리 숫자와 점 다음에 3 자리 숫자 다음에 다른 점 다음에 4 자리 숫자를 보는 것이 더 쉽습니다 [0-9][0-9][0-9].[0-9] [0-9][0-9].[0-9][0-9][0-9][0-9].

또한 구현을 쉽게 교체 할 수 있습니다.

나는 당신이 CLR 정규 표현식의 완전한 의미를 원한다고 결정하기로 결정했습니다. '[0-9]'위에서 아래로 변경 할 수 있습니다 (그리고 아마도 열을 NCHAR(12)그 경우 로 변경할 수 있습니다 )

'[' +
 /*48-57 Basic Latin*/
N'0-9'+
 /*1632-1641 Arabic-Indic*/
N'٠-٩'+
 /*1776-1785 Extended Arabic-Indic*/
N'۰-۹'+
 /*1984-1993 Nko*/
N'߀-߉'+
 /*2406-2415 Devanagari*/
N'०-९'+
 /*2534-2543 Bengali*/
N'০-৯'+
 /*2662-2671 Gurmukhi*/
N'੦-੯'+
 /*2790-2799 Gujarati*/
N'૦-૯'+
 /*2918-2927 Oriya*/
N'୦-୯'+
 /*3046-3055 Tamil*/
N'௦-௯'+
 /*3174-3183 Telugu*/
N'౦-౯'+
 /*3302-3311 Kannada*/
N'೦-೯'+
 /*3430-3439 Malayalam*/
N'൦-൯'+
 /*3558-3567 Sinhala*/
N'෦-෯'+
 /*3664-3673 Thai*/
N'๐-๙'+
 /*3792-3801 Lao*/
N'໐-໙'+
 /*3872-3881 Tibetan*/
N'༠-༩'+
 /*4160-4169 Myanmar*/
N'၀-၉'+
 /*4240-4249 Myanmar Shan*/
N'႐-႙'+
 /*6112-6121 Khmer*/
N'០-៩'+
 /*6160-6169 Mongolian*/
N'᠐-᠙'+
 /*6470-6479 Limbu*/
N'᥆-᥏'+
 /*6608-6617 New Tai Lue*/
N'᧐-᧙'+
 /*6784-6793 Tai Tham Hora*/
N'᪀-᪉'+
 /*6800-6809 Tai Tham Tham*/
N'᪐-᪙'+
 /*6992-7001 Balinese*/
N'᭐-᭙'+
 /*7088-7097 Sundanese*/
N'᮰-᮹'+
 /*7232-7241 Lepcha*/
N'᱀-᱉'+
 /*7248-7257 Ol Chiki*/
N'᱐-᱙'+
 /*42528-42537 Vai*/
N'꘠-꘩'+
 /*43216-43225 Saurashtra*/
N'꣐-꣙'+
 /*43264-43273 Kayah Li*/
N'꤀-꤉'+
 /*43472-43481 Javanese*/
N'꧐-꧙'+
 /*43504-43513 Myanmar Tai Laing*/
N'꧰-꧹'+
 /*43600-43609 Cham*/
N'꩐-꩙'+
 /*44016-44025 Meetei Mayek*/
N'꯰-꯹'+
 /*65296-65305 Fullwidth*/
N'0-9'+
N']'  COLLATE Latin1_General_100_BIN2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.