답변:
귀하의 질문에 나오는 정규식이 완전히 모호한 것은 아닙니다.
유니 코드를 지원하는 대부분의 특징에서 \ 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