KIỂM TRA ràng buộc để thực thi ###. ###. #### khớp mẫu


11

Tôi muốn có một ràng buộc kiểm tra thực thi mẫu biểu thức chính quy này cho mã nhiều phần:

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

... ba số, một số, ba số, một khoảng thời gian, bốn số.

Tôi có cần tạo chức năng CLR để thực thi khớp mẫu không và chức năng CLR có thể được tham chiếu trong DDL không?

Có cách nào để thực thi mô hình theo cách khác, sử dụng LIKEkhông?

Câu trả lời:


16

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².1000khô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ó 2khớp ²hay không.

Tôi đang sử dụng REPLACEchứ không phải mã hóa LIKEmô 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.