Regex dalam pertanyaan Anda tidak sepenuhnya ambigu
Dalam sebagian besar rasa yang mendukung Unicode, \ d mencakup semua digit dari semua skrip. Pengecualian penting adalah Java, JavaScript, dan PCRE. Citarasa Unicode ini hanya cocok dengan angka ASCII dengan \ d.
Jadi dalam banyak rasa itu akan cocok ١١١.١١١.١١١١
(karakter itu menjadi Arab-Indic Digit One )
Saya berasumsi bahwa Anda hanya ingin mencocokkan bahasa latin 0-9
. Kamu bisa menggunakan
DECLARE @T TABLE
(
Col CHAR(12) CHECK (
Col LIKE REPLACE('ddd.ddd.dddd','d','[0-9]')
COLLATE Latin1_General_100_BIN2
)
)
Saya menggunakan klausa susun biner sehingga string suka ¾¾¾.¾¾¾.¾¾¾¾
atau 10².10².1000
tidak lulus pemeriksaan ( seperti yang bisa terjadi pada beberapa pemeriksaan ).
Tidak satu pun dari ini akan cocok dengan regex CLR yang diinginkan dan meskipun menggunakan sintaks set ( [0123456789]
) daripada sintaks rentang ( [0-9]
) menyelesaikan yang pertama masih tergantung pada apakah 2
cocok ²
atau tidak.
Saya menggunakan REPLACE
daripada mengkodekan LIKE
pola karena saya merasa lebih mudah dibaca apa pola memeriksa. Lebih mudah untuk melihat tiga digit dan satu titik diikuti oleh tiga digit lagi dari titik kemudian empat digit dalam format itu daripada parsing [0-9][0-9][0-9].[0-9] [0-9][0-9].[0-9][0-9][0-9][0-9]
.
Ini juga memudahkan untuk menukar implementasi.
Saya Anda memutuskan bahwa Anda ingin semantik penuh ekspresi reguler CLR setelah semua Anda hanya dapat mengubah di '[0-9]'
atas ke bawah (dan kemungkinan mengubah kolom NCHAR(12)
dalam hal itu)
'[' +
/*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