Зворотний вираз у вашому запитанні не зовсім однозначний
У більшості ароматів, які підтримують Unicode, \ d включає всі цифри з усіх сценаріїв. Помітними винятками є Java, JavaScript та PCRE. Ці аромати Unicode відповідають лише цифрам ASCII з \ d.
Тож у багатьох ароматах це відповідало б ١١١.١١١.١١١١
(цей персонаж - арабсько-індійський цифр один )
Я припускаю, що ви просто хочете відповідати латині 0-9
. Можна використовувати
DECLARE @T TABLE
(
Col CHAR(12) CHECK (
Col LIKE REPLACE('ddd.ddd.dddd','d','[0-9]')
COLLATE Latin1_General_100_BIN2
)
)
Я використовую пункт бінарного колаута, так що рядки люблять ¾¾¾.¾¾¾.¾¾¾¾
або 10².10².1000
не проходять перевірку ( як це може статися в деяких порівняннях ).
Жоден з них не відповідає бажаному регулярному вираженню CLR, і хоча використання встановленого синтаксису ( [0123456789]
), а не синтаксису діапазону ( [0-9]
) вирішує перший, він все ще 2
порівнюється залежно від відповідності ²
чи ні.
Я використовую, REPLACE
а не жорстке кодування LIKE
шаблону, тому що я вважаю, що він читає те, що перевіряє шаблон. Легше побачити три цифри і крапку, а за ними три цифри ще одну крапку, а потім чотири цифри у такому форматі, ніж аналіз [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