বর্ণমালা এবং আন্ডারস্কোরগুলির জন্য নিয়মিত অভিব্যক্তি


585

আমি একটি নিয়মিত ভাব প্রকাশ করতে চাই যা যদি স্ট্রিংয়ের মধ্যে কেবল উচ্চ এবং ছোট হাতের অক্ষর, সংখ্যা এবং আন্ডারস্কোর থাকে কিনা তা পরীক্ষা করে থাকে।

regex 

9
এটি অত্যন্ত দুঃখের বিষয় যে বিভিন্ন রেজেক্স ইঞ্জিনগুলির বর্ণমালার সাথে মিলে যাওয়ার বিভিন্ন উপায় রয়েছে। এর মতো একটি প্রশ্নের (বরং অস্পষ্ট, কোনও ভাষা / রেজেক্স স্বাদ নির্দেশিত নয়) প্রতিটি গন্ধের জন্য খুব দীর্ঘ, বা কমপক্ষে একটি খুব সুসংগত উত্তর প্রয়োজন।
উইক্টর স্ট্রিবিউউ

উত্তর:


938

কেবল সেই অক্ষরগুলি (বা একটি খালি স্ট্রিং) ধারণ করে এমন একটি স্ট্রিং মেলতে চেষ্টা করুন

"^[a-zA-Z0-9_]*$"

এটি নেট নিয়মিত এক্সপ্রেশন এবং সম্ভবত অন্যান্য অনেক ভাষার জন্য কাজ করে।

এটি ভেঙে দেওয়া:

^ : start of string
[ : beginning of character group
a-z : any lowercase letter
A-Z : any uppercase letter
0-9 : any digit
_ : underscore
] : end of character group
* : zero or more of the given characters
$ : end of string

আপনি যদি খালি স্ট্রিংগুলিকে অনুমতি দিতে না চান তবে * এর পরিবর্তে + ব্যবহার করুন।


অন্যরা যেমন উল্লেখ করেছে, কিছু রেজেেক্স ভাষার সংক্ষিপ্ত রূপ রয়েছে [a-zA-Z0-9_]। .NET রেজেক্স ভাষায়, আপনি ECMAScript আচরণ চালু করতে পারেন এবং \wএকটি শর্টহ্যান্ড (ফলনকারী ^\w*$বা ^\w+$) হিসাবে ব্যবহার করতে পারেন । মনে রাখবেন যে অন্যান্য ভাষায় এবং। নেট এ ডিফল্টরূপে \wকিছুটা বিস্তৃত এবং এটি ইউনিকোডের অন্যান্য ধরণের অক্ষরের সাথেও মিলবে (এটি জানার জন্য জানাকে ধন্যবাদ)। সুতরাং যদি আপনি সত্যিই কেবলমাত্র সেই অক্ষরগুলির সাথেই মেলে যাচ্ছেন , তবে স্পষ্টত (দীর্ঘতর) ফর্মটি ব্যবহার করা সম্ভবত সেরা।


8
আপনি যদি জার্মানি যান বা আপনি যদি কখনও কোনও জার্মান পাঠ্য সম্পর্কে দেখেন তবে আমি কী বলছি তা দেখতে পাবেন।
উইন্ডোজ প্রোগ্রামার

30
re w এবং [A-Za-z0-9_] বেশিরভাগ রেজেক্স স্বাদে সমতুল্য নয়। \
ডায়ারটিক্স

4
মূল প্রশ্নটি "উপরের এবং ছোট হাতের অক্ষর" বলেছিল, তাই দেখে মনে হবে যে ল্যাটিন-বিহীন লিপিগুলির "অক্ষর" মেলে।
ট্রেজকাজ

3
[\p{upper}\p{lower}\p{gc=Number}_]এই অধিকারটি করার জন্য আপনাকে যা করতে হবে তা হ'ল অনুমান করে কোনও সংযুক্তিযুক্ত অক্ষর নেই।
tchrist

1
দেখে মনে হচ্ছে প্রেগ_ম্যাচটির জন্য আপনার প্যাটার্নটি ডিলিমিটারগুলির সাথে আবদ্ধ করা দরকার, যা সাধারণত স্ল্যাশ হয়। সুতরাং আপনার "/ ^ [a-zA-Z0-9 _] * $ /" দরকার হবে। আরও তথ্যের জন্য এই প্রশ্নটি দেখুন: stackoverflow.com/questions/6445133/… । এই পৃষ্ঠাটিও দেখুন: forums.phpfreaks.com/topic/…
চার্লি

346

এখানে প্রচুর বাকবিতণ্ডা রয়েছে, এবং আমি এর বিরুদ্ধে গভীরভাবে আছি, সুতরাং, আমার চূড়ান্ত উত্তরটি হবে:

/^\w+$/

\w সমতুল্য [A-Za-z0-9_] , যা আপনি যা চান তা অনেকটা। (যদি না আমরা মিশ্রণে ইউনিকোড পরিচয় করি)

+কোয়ান্টিফায়ার ব্যবহার করে আপনি এক বা একাধিক অক্ষর মেলে। যদি আপনিও খালি স্ট্রিং গ্রহণ করতে চান তবে *পরিবর্তে ব্যবহার করুন।


67
\wসাধারণত একা ASCII এ সীমাবদ্ধ থাকে না।
tchrist

26
ইংরেজি বিশ্বের একমাত্র ভাষা নয়, সুতরাং [a-z]এটির গ্রহণযোগ্য উত্তর হওয়া উচিত, এর এবং তারতম্যগুলি নয়। \wল্যাটিন-অক্ষরগুলিও ক্যাপচার করবে। পছন্দ করুন šēēāবাкукареку
অ্যালেক্স

1
ও'রিলি "মাস্টারিং নিয়মিত অভিব্যক্তি" এর 318 পৃষ্ঠায়
যাচাইকৃত

36

আপনি যাচাই করতে চান যে প্রতিটি অক্ষর আপনার প্রয়োজনীয়তার সাথে মেলে, তাই আমরা ব্যবহার করি:

[A-Za-z0-9_]

এবং আপনি এমনকি শর্টহ্যান্ড সংস্করণ ব্যবহার করতে পারেন:

\w

যা সমতুল্য (কিছু রেগেক্স স্বাদে, তাই এটি ব্যবহারের আগে নিশ্চিত হয়ে নিন)। তারপরে পুরো স্ট্রিংটির অবশ্যই মিল থাকতে হবে তা বোঝাতে আপনি ব্যবহার করুন:

^

স্ট্রিংটি নির্দেশ করতে অবশ্যই সেই চরিত্রটি দিয়ে শুরু করতে হবে, তারপরে ব্যবহার করুন

$

স্ট্রিংটি নির্দেশ করতে অবশ্যই সেই চরিত্রটি দিয়ে শেষ করা উচিত। তারপরে ব্যবহার করুন

\w+ or \w*

"1 বা ততোধিক" বা "0 বা আরও" চিহ্নিত করতে। সব একসাথে রাখা, আমাদের আছে:

^\w*$

10
re w এবং [A-Za-z0-9_] বেশিরভাগ রেজেক্স স্বাদে সমতুল্য নয়। \
ডায়ারটিক্স

31

উম ... প্রশ্ন: এর কি কমপক্ষে একটি চরিত্র থাকা দরকার বা না? এটি একটি খালি স্ট্রিং হতে পারে?

^[A-Za-z0-9_]+$

কমপক্ষে একটি উচ্চ বা নিম্নতর অক্ষর বা আন্ডারস্কোর করবে। যদি এটি শূন্য দৈর্ঘ্য হতে পারে, তবে কেবলমাত্র *

^[A-Za-z0-9_]*$

সম্পাদনা:

যদি ডায়াক্রিটিকদের অন্তর্ভুক্ত করা প্রয়োজন (যেমন সিডিলা - ç) তবে আপনাকে উপরের মতো একই অক্ষরের শব্দটি ব্যবহার করতে হবে তবে ডায়াক্রিটিক অক্ষর অন্তর্ভুক্ত রয়েছে:

^\w+$

অথবা

^\w*$

ঠিক এখন আপনি এটি উল্লেখ করার পরে, আমি অন্যান্য ফরাসী চরিত্রগুলির পুরো
গোছাটিও

1
typ

হ্যাঁ, আপনার এখনও + বা * এবং ^ এবং $ - \
ডব্লিউটি

অদ্ভুতভাবে, এটি এখনও $ চিহ্নটি অনুমোদন করে।
ইন্দুস্টেটার

@ ইন্ডাস্টার, এটি বেনআলাবাস্টার কেবল যেটি নির্দেশ করেছে
সেবাস

27

যদিও এটি এর চেয়ে বেশি ভার্জোজ \w, আমি ব্যক্তিগতভাবে পুরো পসিক্স অক্ষর শ্রেণীর নামগুলির পাঠযোগ্যতার প্রশংসা করি ( http://www.zytrax.com/tech/web/regex.htm# বিশেষ ), তাই আমি বলব:

^[[:alnum:]_]+$

তবে উপরের লিঙ্কগুলিতে ডকুমেন্টেশনে বলা হয়েছে যে \w"0 - 9, A - Z এবং a - z (POSIX এর সমতুল্য [: alnum:]) এর মধ্যে কোনও অক্ষরের সাথে মিল থাকবে", আমি এটি সত্য বলে খুঁজে পাইনি have । grep -Pযাই হোক না কেন। আপনি যদি ব্যবহার করেন [:alnum:]তবে আপনাকে স্পষ্টভাবে আন্ডারস্কোর অন্তর্ভুক্ত করতে হবে তবে আপনি যদি ব্যবহার করেন তবে তা নয় \w। সংক্ষিপ্ত এবং মিষ্টি জন্য আপনি নিম্নলিখিতটি হারাতে পারবেন না:

^\w+$

পঠনযোগ্যতার পাশাপাশি, পসআইএক্স অক্ষর ক্লাসগুলি ব্যবহার করে ( http://www.regular-expressions.info/posixbrackets.html ) এর অর্থ হল যে আপনার রেজেক্সগুলি নন ASCII স্ট্রিংগুলিতে কাজ করতে পারে, যা নির্ভর করে রেঞ্জ ভিত্তিক রেজেক্সগুলি কাজ করবে না ASCII অক্ষরের অন্তর্নিহিত ক্রম যা অন্যান্য অক্ষর সেট থেকে পৃথক হতে পারে এবং তাই আপনাকে ক্যাপচার করতে চাইতে পারে এমন কিছু নন-এএসসিআইআই অক্ষর (যেমন œ) বাদ দেবে।


22

কম্পিউটার সায়েন্সে, একটি আলফানিউমেরিক্যাল মানটির অর্থ প্রায়শই প্রথম অক্ষর একটি সংখ্যা নয় তবে বর্ণমালা বা আন্ডারস্কোর হয়। এরপর চরিত্র হতে পারে 0-9, A-Z, a-z, অথবা আন্ডারস্কোর ( _)।

আপনি এটি কীভাবে করবেন তা এখানে:

পিএইচপি এর অধীনে পরীক্ষিত:

$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'

বা এই নিতে

^[A-Za-z_][A-Za-z\d_]*$

এবং এটি আপনার বিকাশের ভাষায় রাখুন।


17

কেমন:

^([A-Za-z]|[0-9]|_)+$

... আপনি যদি স্পষ্ট হতে চান, বা:

^\w+$

... যদি আপনি সংক্ষিপ্ত পছন্দ করেন (পার্ল সিনট্যাক্স)।


12

"কমপক্ষে একটি" স্টাফ করার জন্য লুক হেড ব্যবহার করুন। বিশ্বাস করুন এটা অনেক সহজ।

এখানে একটি উদাহরণ রয়েছে যার জন্য কমপক্ষে একটি অঙ্ক এবং একটি বর্ণযুক্ত 1-10 টি অক্ষর প্রয়োজন:

^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$

দ্রষ্টব্য: w \ w ব্যবহার করতে পারত তবে ECMA / ইউনিকোড বিবেচনাগুলি \ w "শব্দের চরিত্র" এর ক্যারেক্টার কভারেজ বাড়িয়ে তুলবে।


আমরা যদি _ এবং - তালিকায় যুক্ত করতে চাই তবে আমরা কী করব?
রাহি

10

স্ট্রিংয়ের জন্য আমি এই বহু-ভাষাগত এক্সটেনশানগুলি ব্যবহার করে দেখুন।

#AlphaNumeric - স্ট্রিংয়ে অন্ততপক্ষে 1 টি আলফা থাকতে হবে (ইউনিকোড পরিসরে অক্ষর, চারসেটে উল্লিখিত) এবং ন্যূনতম 1 নম্বর (নামসেটে উল্লিখিত)। এছাড়াও, স্ট্রিংটিতে কেবলমাত্র আলফা এবং সংখ্যা থাকা উচিত।

ইসআল্ফা - স্ট্রিংয়ে কমপক্ষে 1 টি আলফা থাকতে হবে (বর্ণিত ভাষা লেখায় সেটেট করা উচিত) এবং কেবল আলফা সমন্বিত থাকতে হবে।

ইসনামারিক - স্ট্রিংয়ে কমপক্ষে 1 নম্বর থাকা উচিত (বর্ণনীতে নির্দিষ্ট নম্বরটিতে নির্দিষ্ট করা উচিত) এবং কেবলমাত্র সংখ্যার সমন্বয়ে।

পছন্দসই ভাষার জন্য চারসেট / নামসেট পরিসর নির্দিষ্ট করা যেতে পারে। ইউনিকোড রেঞ্জগুলি নীচের লিঙ্কটিতে উপলব্ধ:

http://www.ssec.wisc.edu/~tomw/java/unicode.html

এপিআই:

    public static bool IsAlphaNumeric(this string stringToTest)
    {
        //English
        const string charSet = "a-zA-Z";
        const string numSet = @"0-9";

        //Greek
        //const string charSet = @"\u0388-\u03EF";            
        //const string numSet = @"0-9";

        //Bengali
        //const string charSet = @"\u0985-\u09E3";
        //const string numSet = @"\u09E6-\u09EF";

        //Hindi
        //const string charSet = @"\u0905-\u0963";
        //const string numSet = @"\u0966-\u096F";

        return Regex.Match(stringToTest, @"^(?=[" + numSet + @"]*?[" + charSet + @"]+)(?=[" + charSet + @"]*?[" + numSet + @"]+)[" + charSet + numSet +@"]+$").Success;
    }

    public static bool IsNumeric(this string stringToTest)
    {
        //English
        const string numSet = @"0-9";

        //Hindi
        //const string numSet = @"\u0966-\u096F";

        return Regex.Match(stringToTest, @"^[" + numSet + @"]+$").Success;
    }

    public static bool IsAlpha(this string stringToTest)
    {
        //English
        const string charSet = "a-zA-Z";

        return Regex.Match(stringToTest, @"^[" + charSet + @"]+$").Success;
    }

ব্যবহার:

        //English
        string test = "AASD121asf";

        //Greek
        //string test = "Ϡϛβ123";

        //Bengali
        //string test = "শর৩৮";

        //Hindi
        //string test = @"क़लम३७ख़";

        bool isAlphaNum = test.IsAlphaNumeric();

@ সাহা: আমি একমাত্র বর্ণমালা যুক্ত করেছি (এবং কেবলমাত্র সংখ্যাও)
শান্তনু

8

নিম্নোক্ত রেজেক্সগুলি আলফানিউমেরিক অক্ষর এবং আন্ডারস্কোরের সাথে মেলে:

^[a-zA-Z0-9_]+$

উদাহরণস্বরূপ, পার্লে:

#!/usr/bin/perl -w

my $arg1 = $ARGV[0];

# check that the string contains *only* one or more alphanumeric chars or underscores
if ($arg1 !~ /^[a-zA-Z0-9_]+$/) {
  print "Failed.\n";
} else {
    print "Success.\n";
}

আপনার কোডের প্যাটার্নটি সঠিক, তবে উপরের প্যাটার্নটি কেবল একটি একক উদাহরণ পরীক্ষা করে।
বেনআলাবাস্টার

এটি উদ্দেশ্যমূলক ছিল, কোডের নমুনাটি আসলে একটি স্ট্রিং চেক করার ক্ষেত্রে একটি স্পষ্টকরণের ব্যবহার হিসাবে তৈরি হয়েছিল। এছাড়াও কোড কেন লাইন চিহ্নিতকারীদের সূচনা এবং শেষ রয়েছে যা রেজেক্স উদাহরণে নেই।
জে

1
@Windows প্রোগ্রামার - en.wikipedia.org/wiki/Alphanumeric - ল্যাটিন বর্ণমালা না "লাতিন অক্ষর সেট" যা কি ডায়াক্রিটিক ইত্যাদি কি কেবল এক শব্দার্থবিদ্যা ইস্যু অন্তর্ভুক্ত, কিন্তু আমি ব্যক্তিগতভাবে জেড শব্দটি আলফানিউমেরিক সাধারণ ব্যবহারের সঙ্গে যেতে এবং 0-9।
জয়

2
Latin লাতিন আমেরিকা সহ স্প্যানিশ ভাষায় বর্ণমালার একটি চিঠি letter
উইন্ডোজ প্রোগ্রামার

2
"আমি একটি নিয়মিত ভাব প্রকাশ করতে চাই যা স্ট্রিংয়ে কেবল উচ্চ এবং ছোট হাতের অক্ষর, সংখ্যা এবং আন্ডারস্কোর রয়েছে কিনা তা পরীক্ষা করে দেখায়" এটি লাতিন অক্ষরে সীমাবদ্ধ করে না। "নিম্নলিখিত রেজেক্স বর্ণানুক্রমিক অক্ষরের সাথে মেলে এবং আন্ডারস্কোর" এটিকে লাতিন বর্ণগুলিতে সীমাবদ্ধ করে না। "^ [a-zA-Z0-9 _] + $" ব্যর্থ।
উইন্ডোজ প্রোগ্রামার

6

এটি বেশিরভাগ ক্ষেত্রে কাজ করা উচিত।

/^[\d]*[a-z_][a-z\d_]*$/gi

এবং বেশিরভাগ অর্থ আমার,

abcd       True
abcd12     True
ab12cd     True
12abcd     True

1234       False


ব্যাখ্যা

  1. ^ ... $ - শুরু এবং শেষ দিয়ে প্যাটার্নটি মেলে
  2. [\d]* - শূন্য বা আরও বেশি সংখ্যার সাথে মেলে
  3. [a-z_] - একটি বর্ণমালা বা আন্ডারস্কোর মেলে
  4. [a-z\d_]* - একটি বর্ণমালা বা অঙ্ক বা আন্ডারস্কোরের সাথে মেলে
  5. /gi - স্ট্রিং এবং কেস-সংবেদনশীল জুড়ে বিশ্বব্যাপী মেলে

2
মূল প্রশ্নের একটি চিঠি উপস্থিত থাকা উচিত ছিল না।
দিমিত্রি কুজমিনভ

আপনি কোন চিঠির কথা বলছেন? আমার রেজেক্সে প্রশ্নে জিজ্ঞাসা করা একটি রয়েছে। বর্ণমালা, সংখ্যা, আন্ডারস্কোর
চিন্মায় পতি

1234লেখক দ্বারা অনুরোধ ভাষা থেকে শব্দ। আপনার ভাষা আরও সীমাবদ্ধ।
দিমিত্রি কুজমিনভ

4

আমার জন্য একটি সমস্যা ছিল যে আমি আলফা, সংখ্যাসূচক এবং আলফা সংখ্যার মধ্যে পার্থক্য করতে চাই, সুতরাং এটি নিশ্চিত করতে যে কোনও আলফানামুরিক স্ট্রিংয়ে কমপক্ষে একটি আলফা এবং কমপক্ষে একটি সংখ্যাযুক্ত থাকে, আমি ব্যবহার করেছি:

^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$

ঠিক আমি কী চাই ... ধন্যবাদ
অনিকেত কালে

3

আপনি কোয়ান্টিফায়ার দিয়ে যা চান তার জন্য কমপক্ষে 1 টি অক্ষর এবং 255 টির বেশি অক্ষর না নির্দিষ্ট করার জন্য এখানে রেজেক্স দেওয়া হচ্ছে

[^a-zA-Z0-9 _]{1,255}

2

আপনারা যারা ইউনিকোড বর্ণানুক্রমিক মিলের সন্ধান করছেন তাদের জন্য আপনি এমন কিছু করতে চাইতে পারেন:

^[\p{L} \p{Nd}_]+$

Http://unicode.org/report/tr18/ এবং http://www.regular-expressions.info/unicode.html এ আরও পড়ুন


যদি আপনি কেবল পি {এল} এর পরিবর্তে লাতিনে পি {ল্যাটিন
আগস্টিন

2

আমি বিশ্বাস করি আপনি আপনার ম্যাচগুলিতে ল্যাটিন এবং ইউনিকোড অক্ষর নিচ্ছেন না। উদাহরণস্বরূপ, আপনার যদি "ã" বা "ü" চরগুলি গ্রহণ করতে হয়, "\ w" এর ব্যবহার কাজ করবে না।

আপনি বিকল্প হিসাবে এই পদ্ধতির ব্যবহার করতে পারেন:

^[A-ZÀ-Ýa-zà-ý0-9_]+$

আশা করি এটা সাহায্য করবে!


1

পুরো স্ট্রিংটি পরীক্ষা করতে এবং খালি স্ট্রিংগুলিকে অনুমতি না দেওয়ার জন্য চেষ্টা করুন

^[A-Za-z0-9_]+$

1

^\w*$ নীচের সংমিশ্রনের জন্য কাজ করবে

1
123
1av
pRo
av1

খালি লাইনের কথা কী? এটিও কি আলফানিউমেরিক স্ট্রিং?
v010dya

0

এটি আমার জন্য কাজ করে আপনি চেষ্টা করতে পারেন

[\\p{Alnum}_]

0

এটি আমার পক্ষে কাজ করে, ও'রিলির "মাস্টারিং নিয়মিত অভিব্যক্তি" এ এটি পাওয়া গেছে:

/^\w+$/

ব্যাখ্যা:

  • the স্ট্রিংয়ের শুরুতে অবস্থানটি জোর দেয়
    • \ ডাব্লু + যেকোন শব্দের অক্ষরের সাথে মেলে ([a-zA-Z0-9_] এর সমান)
    • "+" কোয়ানটিফায়ার - এক থেকে সীমাহীন সময়ের সাথে ম্যাচ, যতবার সম্ভব সম্ভব হিসাবে ফিরে দেওয়া (লোভী)
  • the স্ট্রিংয়ের শেষে অবস্থানটি জোর দেয়

নিজেকে যাচাই করুন:

const regex = /^\w+$/;
const str = `nut_cracker_12`;
let m;

if ((m = regex.exec(str)) !== null) {
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.