###। ###। #### প্যাটার্ন ম্যাচ প্রয়োগের জন্য সীমাবদ্ধতা পরীক্ষা করুন


11

আমি একটি চেক সীমাবদ্ধতা রাখতে চাই যা বহু অংশের কোডের জন্য এই রেজেক্স প্যাটার্নটি প্রয়োগ করে:

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

... তিনটি সংখ্যা, একটি পিরিয়ড, তিনটি সংখ্যা, একটি পিরিয়ড, চার নম্বর।

প্যাটার্ন মিলটি প্রয়োগ করার জন্য কি আমার একটি সিএলআর ক্রিয়াকলাপ তৈরি করা দরকার, এবং সিডিআর ফাংশনটি ডিডিএলে রেফারেন্স করা যায়?

প্যাটার্নটি অন্য কোনও উপায়ে প্রয়োগ করার উপায় আছে কি LIKE?

উত্তর:


16

আপনার প্রশ্নের রিজেক্স পুরোপুরি দ্ব্যর্থহীন নয়

ইউনিকোডকে সমর্থন করে এমন বেশিরভাগ স্বাদে, \ d সমস্ত স্ক্রিপ্টের সমস্ত অঙ্ক অন্তর্ভুক্ত করে। জাভা, জাভাস্ক্রিপ্ট এবং পিসিআরই উল্লেখযোগ্য ব্যতিক্রম। এই ইউনিকোড স্বাদগুলি কেবলমাত্র 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পাস না করে ( কিছু জোটের ক্ষেত্রে যেমন ঘটতে পারে )।

এগুলির কোনওটিই পছন্দসই সিএলআর রেজেক্সের সাথে মেলে না এবং [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]

এটি বাস্তবায়নের সোয়াপ আউটকে সহজ করে তোলে।

আমি সিদ্ধান্ত নিয়েছি যে আপনি সিএলআর নিয়মিত এক্সপ্রেশনটির সম্পূর্ণ প্রস্ফুটিত শব্দার্থক শব্দগুলি চান যা আপনি কেবল '[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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.