Regex trong câu hỏi của bạn không hoàn toàn rõ ràng
Trong hầu hết các hương vị hỗ trợ Unicode, \ d bao gồm tất cả các chữ số từ tất cả các tập lệnh. Các ngoại lệ đáng chú ý là Java, JavaScript và PCRE. Các hương vị Unicode này chỉ khớp với các chữ số ASCII với \ d.
Vì vậy, trong nhiều hương vị, nó sẽ phù hợp ١١١.١١١.١١١١
(nhân vật đó là Người Ả Rập-Chỉ số Một )
Tôi giả sử rằng bạn chỉ muốn phù hợp với tiếng Latin 0-9
. Bạn có thể dùng
DECLARE @T TABLE
(
Col CHAR(12) CHECK (
Col LIKE REPLACE('ddd.ddd.dddd','d','[0-9]')
COLLATE Latin1_General_100_BIN2
)
)
Tôi đang sử dụng mệnh đề đối chiếu nhị phân để các chuỗi như ¾¾¾.¾¾¾.¾¾¾¾
hoặc 10².10².1000
không vượt qua kiểm tra ( như có thể xảy ra trên một số đối chiếu ).
Cả hai điều này sẽ không khớp với biểu thức CLR mong muốn và mặc dù sử dụng cú pháp set ( [0123456789]
) thay vì cú pháp phạm vi ( [0-9]
) giải quyết cái đầu tiên, nó vẫn phụ thuộc đối chiếu cho dù có 2
khớp ²
hay không.
Tôi đang sử dụng REPLACE
chứ không phải mã hóa LIKE
mô hình vì tôi thấy nó dễ đọc hơn những gì mẫu đang kiểm tra. Dễ dàng thấy ba chữ số và một dấu chấm theo sau là ba chữ số một chấm khác sau đó bốn chữ số ở định dạng đó hơn là phân tích cú pháp [0-9][0-9][0-9].[0-9] [0-9][0-9].[0-9][0-9][0-9][0-9]
.
Nó cũng làm cho nó dễ dàng hơn để trao đổi thực hiện.
Tôi bạn quyết định rằng bạn muốn toàn bộ ngữ nghĩa của biểu thức chính quy CLR sau tất cả những gì bạn có thể thay đổi '[0-9]'
ở trên thành bên dưới (và có thể thay đổi cột thành NCHAR(12)
trong trường hợp đó)
'[' +
/*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