চলকটিতে বৈধ ইউআইডি / জিইউডি সনাক্তকারী রয়েছে কিনা তা কীভাবে পরীক্ষা করবেন?
আমি বর্তমানে কেবলমাত্র 1 এবং 4 প্রকারের বৈধতা দেওয়ার বিষয়ে আগ্রহী, তবে এটি আপনার উত্তরগুলির সীমাবদ্ধতা হওয়া উচিত নয়।
চলকটিতে বৈধ ইউআইডি / জিইউডি সনাক্তকারী রয়েছে কিনা তা কীভাবে পরীক্ষা করবেন?
আমি বর্তমানে কেবলমাত্র 1 এবং 4 প্রকারের বৈধতা দেওয়ার বিষয়ে আগ্রহী, তবে এটি আপনার উত্তরগুলির সীমাবদ্ধতা হওয়া উচিত নয়।
উত্তর:
বর্তমানে, ইউএইউডিএসগুলি আরএফসি 4122-এ উল্লিখিত হিসাবে রয়েছে। একটি প্রায়ই উপেক্ষিত প্রান্ত ক্ষেত্রে NIL UUID উল্লেখ নেই এখানে । নিম্নোক্ত রেজেক্স এটিকে বিবেচনায় নিয়েছে এবং কোনও নীল ইউইউইডির জন্য একটি ম্যাচ ফেরত দেবে। কোনও ইউইউডি-র জন্য নীচে দেখুন যা কেবল নন-এনআইএল ইউআইডিগুলি গ্রহণ করে। এই উভয় সমাধানের জন্য 1 থেকে 5 সংস্করণ (তৃতীয় ব্লকের প্রথম অক্ষর দেখুন)।
সুতরাং একটি ইউআইডি বৈধ করার জন্য ...
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i
... নিশ্চিত করে যে আপনার কাছে একটি প্রমিত বিন্যাসিত ইউইউডি রয়েছে যা সংস্করণ 1 থেকে 5 অবধি এবং আরএফসি 4122 অনুসারে উপযুক্ত বৈকল্পিক।
দ্রষ্টব্য: ধনুর্বন্ধনী {
এবং প্রচলিত }
নয়। এগুলি কিছু সিস্টেম এবং ব্যবহারের একটি নিদর্শন।
মূল প্রশ্নের প্রয়োজনীয়তা মেটাতে উপরের রেজেক্সটিকে সংশোধন করা সহজ।
ইঙ্গিত: রেজেক্স গ্রুপ / ক্যাপচারগুলি
নীল ইউইউডিটির সাথে ম্যাচটি এড়াতে:
/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i
[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
রেগেক্স উদ্ধার
/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test('01234567-9ABC-DEF0-1234-56789ABCDEF0');
বা বন্ধনী সহ
/^\{?[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\}?$/
/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/i
আপনি যদি কোনও নির্দিষ্ট ইউআইডি সংস্করণ পরীক্ষা করতে বা যাচাই করতে চান তবে এখানে সম্পর্কিত রেজিেক্সগুলি দেওয়া হচ্ছে।
মনে রাখবেন যে পার্থক্যটি হ'ল সংস্করণ নম্বর , যা ইউআইডি 4122 আরএফসির
4.1.3. Version
অধ্যায়ে ব্যাখ্যা করা হয়েছে ।
সংস্করণ নম্বরটি তৃতীয় গোষ্ঠীর প্রথম চরিত্র [VERSION_NUMBER][0-9A-F]{3}
:
ইউআইডি ভি 1:
/^[0-9A-F]{8}-[0-9A-F]{4}-[1][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
ইউআইডি ভি 2:
/^[0-9A-F]{8}-[0-9A-F]{4}-[2][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
ইউআইডি ভি 3:
/^[0-9A-F]{8}-[0-9A-F]{4}-[3][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
ইউআইডি ভি 4:
/^[0-9A-F]{8}-[0-9A-F]{4}-[4][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
ইউআইডি ভি 5:
/^[0-9A-F]{8}-[0-9A-F]{4}-[5][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
আপনি যদি উন্নয়নের জন্য নোড.জেএস ব্যবহার করেন তবে এটি ভ্যালিডেটর নামে একটি প্যাকেজ ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। এটিতে ইউআইডি'র বিভিন্ন সংস্করণ যাচাই করার জন্য প্রয়োজনীয় সমস্ত রেইগেক্সগুলি অন্তর্ভুক্ত রয়েছে যাচাইয়ের জন্য আপনি অন্যান্য বিভিন্ন ফাংশন পান।
এখানে এনপিএম লিঙ্ক: ভ্যালিডেটর
var a = 'd3aa88e2-c754-41e0-8ba6-4198a34aa0a2'
v.isUUID(a)
true
v.isUUID('abc')
false
v.isNull(a)
false
/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i
এবং / অথবা /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
এবং / বা /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
এবং / অথবা /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i
গাম্বলের উত্তর ছাড়াও প্রায় সব ক্ষেত্রেই এটি কাজ করবে , এখন পর্যন্ত প্রদত্ত সমস্ত উত্তর মিস করেছে যে গোষ্ঠীযুক্ত ফর্ম্যাটিং (8-4-4-4-12) পাঠ্যে জিইউইডিগুলি এনকোড করা বাধ্যতামূলক নয় । এটি অত্যন্ত প্রায়শই ব্যবহৃত হয় তবে স্পষ্টতই 32 টি হেক্সাডেসিমাল ডিজিটের একটি সরল চেইনটি বৈধ হতে পারে। [1] রেজেক্স এনহ :
/^[0-9a-f]{8}-?[0-9a-f]{4}-?[1-5][0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$/i
[1] প্রশ্নটি ভেরিয়েবলগুলি পরীক্ষা করার বিষয়ে , সুতরাং আমাদের ব্যবহারকারী-বন্ধুত্বপূর্ণ ফর্মটিও অন্তর্ভুক্ত করা উচিত।
{?[0-9a-f]{8}-?[0-9a-f]{4}-?[1-5][0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}}?
আরএফসির ৪.১..7 এ সংজ্ঞায়িত "টাইপ 0" নীল ইউইউডি-তে এ পর্যন্ত পোস্ট করা সমস্ত প্রকার-নির্দিষ্ট রেজেক্সগুলি ব্যর্থ হচ্ছে:
নীল ইউইউডিউ ইউইউডি-র বিশেষ রূপ যা সমস্ত 128 বিট শূন্যতে সেট করার জন্য নির্দিষ্ট করা হয়েছে:
00000000-0000-0000-0000-000000000000
ওল্ফের উত্তরটি সংশোধন করতে:
/^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-5][0-9a-f]{3}-?[089ab][0-9a-f]{3}-?[0-9a-f]{12}$/i
বা, সমস্ত জিরো ব্যতীত একটি "টাইপ 0" সঠিকভাবে বাদ দিতে, আমাদের নিম্নলিখিতগুলি রয়েছে (লুকে ধন্যবাদ):
/^(?:[0-9a-f]{8}-?[0-9a-f]{4}-?[1-5][0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i
abcdef00-0000-0000-0000-000000000000
আপনার রেজেক্সের সাথে মেলে। এই রেজেক্সটি শূন্য সহ বৈধ ইউআইডিগুলির সাথে মিলবে:/^(?:[0-9a-f]{8}-?[0-9a-f]{4}-?[1-5][0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i
আমি মনে করি গাম্বলের উত্তরটি প্রায় নিখুঁত, তবে এটি আরএফসি 4122 § 4.1.1 এর ভুল ব্যাখ্যা করে । ভেরিয়েন্ট বিভাগটি কিছুটা।
এটি ভেরিয়েন্ট -1 ইউআইডি (10xx = 8..b) কভার করে তবে ভেরিয়েন্ট -0 (0xxx = 0..7) এবং ভেরিয়েন্ট -2 (110x = সি..ডি) রূপগুলি অন্তর্ভুক্ত করে না যা পশ্চাদগম্য সামঞ্জস্যের জন্য সংরক্ষিত, সুতরাং তারা প্রযুক্তিগতভাবে বৈধ ইউআইডি হয়। ভেরিয়েন্ট -4 (111x = ই..ফ) প্রকৃতপক্ষে ভবিষ্যতের ব্যবহারের জন্য সংরক্ষিত, সুতরাং সেগুলি বর্তমানে বৈধ নয়।
এছাড়াও, 0 প্রকারটি বৈধ নয়, সেই "ডিজিট" কেবল 0 হতে অনুমোদিত যদি এটি একটি নীল ইউআইডিউড হয় (যেমন ইভানের উত্তরে উল্লিখিত )।
সুতরাং আমি মনে করি বর্তমান আরএফসি 4122 স্পেসিফিকেশন মেনে চলা সবচেয়ে নির্ভুল রেগেক্স (হাইফেন সহ):
/^([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[0-9a-d][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i
^ ^^^^^^
(0 type is not valid) (only e..f variant digit is invalid currently)
স্ট্রিংটি ইউআইডি কিনা তা পরীক্ষা করতে। ম্যাচ () পদ্ধতিটি ব্যবহার করুন।
public boolean isUUID(String s){
return s.match("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$");
}
উপরের উত্তরগুলির একটি সামান্য পরিবর্তিত সংস্করণ আরও সংক্ষিপ্ত উপায়ে লেখা। এটি হাইফেন সহ যে কোনও জিইউডি বৈধ করবে (তবে হাইফেনগুলি alচ্ছিক করতে সহজেই সংশোধন করা হয়েছে)। এটি আপার এবং লোয়ার কেস চরিত্রগুলিকে সমর্থন করবে যা নির্দিষ্টকরণ নির্বিশেষে সম্মেলনে পরিণত হয়েছে:
/^([0-9a-fA-F]{8})-(([0-9a-fA-F]{4}\-){3})([0-9a-fA-F]{12})$/i
এখানে কীটি নীচে পুনরাবৃত্তি অংশ
(([0-9a-fA-F]{4}\-){3})
যা কেবল 4 চর নিদর্শনগুলি 3 বার পুনরাবৃত্তি করে
A-f
এর A-F
মতো হওয়া উচিত :/^([0-9a-fA-F]{8})-(([0-9a-fA-F]{4}\-){3})([0-9a-fA-F]{12})$/i
নোডে এটি করার একটি ভাল উপায় হ'ল ajv
প্যাকেজটি ব্যবহার করা ( https://github.com/epoberezkin/ajv )।
const Ajv = require('ajv');
const ajv = new Ajv({ allErrors: true, useDefault: true, verbose: true });
const uuidSchema = { type: 'string', format: 'uuid' };
ajv.validate(uuidSchema, 'bogus'); // returns false
ajv.validate(uuidSchema, 'd42a8273-a4fe-4eb2-b4ee-c1fc57eb9865'); // returns true with v4 GUID
ajv.validate(uuidSchema, '892717ce-3bd8-11ea-b77f-2e728ce88125'); // returns true with a v1 GUID
আমি মনে করি regular নিয়মিত অভিব্যক্তিগুলি এড়াতে আরও ভাল উপায় স্ট্রিং থেকে স্থিতিশীল পদ্ধতিটি ব্যবহার করা।
id = UUID.randomUUID();
UUID uuid = UUID.fromString(id.toString());
Assert.assertEquals(id.toString(), uuid.toString());
অন্য দিকে
UUID uuidFalse = UUID.fromString("x");
java.lang.IllegalArgumentException নিক্ষেপ করে: অবৈধ ইউইউডি স্ট্রিং: এক্স