নতুন ব্যবহারকারী যুক্ত করার সময়, স্ট্রিংটি কীভাবে বৈধ হয়?
আমি মনে করি একটি নিয়মিত প্রকাশ আছে। নিয়মিত প্রকাশটি কী?
নতুন ব্যবহারকারী যুক্ত করার সময়, স্ট্রিংটি কীভাবে বৈধ হয়?
আমি মনে করি একটি নিয়মিত প্রকাশ আছে। নিয়মিত প্রকাশটি কী?
উত্তর:
ব্যবহারকারীর নামটির জন্য সাধারণ নিয়মটি এর দৈর্ঘ্যটি অবশ্যই 32 টি অক্ষরের চেয়ে কম হবে। বৈধ ব্যবহারকারীর নামটি কী তা তৈরি করতে এটি আপনার বিতরণের উপর নির্ভর করে।
ডেবিয়ানে, shadow-utils 4.1
এখানে একটি is_valid_name
ফাংশন রয়েছে chkname.c
:
static bool is_valid_name (const char *name)
{
/*
* User/group names must match [a-z_][a-z0-9_-]*[$]
*/
if (('\0' == *name) ||
!((('a' <= *name) && ('z' >= *name)) || ('_' == *name))) {
return false;
}
while ('\0' != *++name) {
if (!(( ('a' <= *name) && ('z' >= *name) ) ||
( ('0' <= *name) && ('9' >= *name) ) ||
('_' == *name) ||
('-' == *name) ||
( ('$' == *name) && ('\0' == *(name + 1)) )
)) {
return false;
}
}
return true;
}
এবং ব্যবহারকারীর দৈর্ঘ্য আগে পরীক্ষা করা হয়েছিল:
bool is_valid_user_name (const char *name)
{
/*
* User names are limited by whatever utmp can
* handle.
*/
if (strlen (name) > USER_NAME_MAX_LENGTH) {
return false;
}
return is_valid_name (name);
}
ব্যবহারের ম্যান পৃষ্ঠা থেকে (8) :
সাধারণত কেবলমাত্র এমন ব্যবহারকারীর নাম ব্যবহার করার পরামর্শ দেওয়া হয় যা ছোট হাতের অক্ষর বা আন্ডারস্কোর দিয়ে শুরু হয়, তারপরে ছোট হাতের অক্ষর, অঙ্কগুলি, আন্ডারস্কোরগুলি বা ড্যাশগুলি অনুসরণ করে। তারা ডলারের সাইন দিয়ে শেষ করতে পারে। নিয়মিত অভিব্যক্তি শর্তাবলী: [a-z _] [a-z0-9 _-] * [$]?
ডেবিয়ানে, কেবলমাত্র সীমাবদ্ধতা হ'ল ব্যবহারকারীর নাম অবশ্যই ড্যাশ ('-') দিয়ে শুরু করা উচিত নয় বা কোনও কোলন (':') বা একটি শ্বেত স্পেস (স্পেস: '', রেখার শেষ: '\ n', ট্যাবুলেশন: ' \ t 'ইত্যাদি)। মনে রাখবেন যে স্ল্যাশ ('/') ব্যবহার করা ব্যবহারকারীর হোম ডিরেক্টরিটির সংজ্ঞা দেওয়ার জন্য ডিফল্ট অ্যালগরিদমকে ভেঙে দিতে পারে।
ব্যবহারকারীর নামগুলি কেবলমাত্র 32 টি অক্ষর পর্যন্ত দীর্ঘ হতে পারে।
সুতরাং, একটি সাধারণ সুপারিশ আছে। আসল সীমাবদ্ধতাগুলি আপনার প্রয়োগ / বিতরণের নির্দিষ্টকরণের উপর নির্ভর করে। ডেবিয়ান-ভিত্তিক সিস্টেমগুলিতে, দৃশ্যত খুব শক্ত বাধা নেই। আসলে, আমি কেবল useradd '€'
আমার উবুন্টু বাক্সে চেষ্টা করেছি, এবং এটি কার্যকর হয়েছে। অবশ্যই, এটি এমন কিছু অ্যাপ্লিকেশন ভেঙে ফেলতে পারে যা এই জাতীয় অস্বাভাবিক ব্যবহারকারীর নাম আশা করে না। এই জাতীয় সমস্যা এড়াতে, সাধারণ সুপারিশটি অনুসরণ করা ভাল।
প্রায় 4 বছরের পুরানো এই প্রশ্নটি নেক্রোবাম্পিংয়ের জন্য দুঃখিত, তবে এটি ইন্টারনেট অনুসন্ধানের ফলাফলগুলির উপরে উঠে আসে এবং এটি আরও কিছুটা মনোযোগ দেওয়ার জন্য সতর্ক করে।
আরও সঠিক রেগেক্স হ'ল (হ্যাঁ, আমি জানি, ম্যান পেজ থাকা সত্ত্বেও):
^[a-z_]([a-z0-9_-]{0,31}|[a-z0-9_-]{0,30}\$)$
আশা করি এটি সন্ধানকারীদের কয়েকজনকে সহায়তা করে।
এটি ভেঙে ফেলার জন্য:
^
) শুধুমাত্র ছোট হাতের অক্ষর বা একটি আন্ডারস্কোর (সঙ্গে [a-z_]
)। এটি ঠিক 1 অক্ষর দখল করে ।( ... )
):
{0,31}
এর) চিঠি , সংখ্যা , আন্ডারস্কোর , এবং / অথবা হাইফেন ( [a-z0-9_-]
), বা ( |
)\$
) শেষে, এবং তারপর$
)।যারা রেজেক্স প্যাটার্নগুলির সাথে অপরিচিত তাদের জন্য, আপনি ডলার সাইনটিতে কেন 2.2 এ ব্যাকস্ল্যাশ পড়েছিল তা জিজ্ঞাসা করতে পারেন। তবে 3-এ করেন নি কারণ এটি বেশিরভাগ (সমস্ত?) রেজেেক্স রূপগুলিতে ডলারের চিহ্নটি একটি স্ট্রিং (বা লাইন ইত্যাদি) এর সমাপ্তি নির্দেশ করে। ইঞ্জিনটি ব্যবহৃত হচ্ছে তার উপর নির্ভর করে, যদি এটি প্রকৃত স্ট্রিংয়ের অংশ হয় তবে এড়াতে হবে (আমি কোনও রেগেক্স ইঞ্জিনের মাথাটি শীর্ষে ফেলে ভাবতে পারি না যা শুদ্ধ অভিব্যক্তির জন্য ব্যাকস্ল্যাশকে অব্যাহতি হিসাবে ব্যবহার করে না) ।
দ্রষ্টব্য যে দেবিয়ান এবং উবুন্টু পুরোপুরি পসিক্স / ছায়া আপস্ট্রিম অনুগত ব্যবহারকারী নামটির জন্য কিছু বিধিনিষেধ অপসারণ করে (উদাহরণস্বরূপ, এবং এটি ঠিক করা হয়েছে কিনা তা আমি জানি না, তবে তারা ব্যবহারকারীর নামটি একটি সংখ্যার সাথে শুরু করার অনুমতি দেয় - যা আসলে এই কারণটি হয়েছিল বাগ ) যদি আপনি ক্রস-প্ল্যাটফর্মের গ্যারান্টি দিতে চান তবে আমি দেবিয়ান, উবুন্টু এবং অন্যদের যা যা পরীক্ষা করে / পাস করতে ব্যর্থ হয় তার চেয়ে উপরের রেজেক্স প্যাটার্নটি সুপারিশ করব।
[abcdefghijklmnopqrstuvwxyz]
পরিবর্তে হওয়া উচিত [a-z]
। [a-z]
অনেক regexp ইঞ্জিন এছাড়াও ভালো জিনিস মিলে যায় é
, œ
বা এমনকি কখনও কখনও বহু-চরিত্র ক্রমানুসারে সাজানো মত উপাদান dsz
হাঙ্গেরীয় লোকেলে।
java.util.regex.Pattern.matches("^[a-z_]([a-z0-9_-]{0,31}|[a-z0-9_-]{0,30}\\$)$", user);