একটি স্ট্রিংয়ে সি # তে কেবলমাত্র অক্ষর রয়েছে তা যাচাই করা হচ্ছে


186

আমার একটি ইনপুট স্ট্রিং রয়েছে এবং আমি এটি যাচাই করতে চাই:

  • কেবলমাত্র চিঠি বা
  • কেবলমাত্র অক্ষর এবং সংখ্যা বা
  • কেবলমাত্র অক্ষর, সংখ্যা বা আন্ডারস্কোর

স্পষ্ট করার জন্য, কোডটিতে আমার কাছে 3 টি পৃথক কেস রয়েছে, প্রত্যেকে বিভিন্ন বৈধতার জন্য কল করছে। সি # তে এটি অর্জনের সবচেয়ে সহজ উপায় কী?

উত্তর:


291

কেবলমাত্র চিঠিগুলি:

Regex.IsMatch(input, @"^[a-zA-Z]+$");

কেবলমাত্র অক্ষর এবং সংখ্যা:

Regex.IsMatch(input, @"^[a-zA-Z0-9]+$");

কেবলমাত্র অক্ষর, সংখ্যা এবং আন্ডারস্কোর:

Regex.IsMatch(input, @"^[a-zA-Z0-9_]+$");

31
এটি একটি লাতিন বর্ণমালা ধরেছে, যেখানে Char.IsLetter নন-ল্যাটিন বর্ণমালার জন্য অনুমতি দেয়।
পল ভ্যান ব্রেঙ্ক

5
Regex.IsMatch (ইনপুট, "^ [a-z0-9] + $", RegexOptions.IgnoreCase);
টম ফোবিয়ার

4
@ টমফোবার: এটি পরিষ্কারভাবে উল্লেখ করার চেয়ে ধীরে ধীরে [a-zA-Z]
ফিলিপ লেবার্ট

25
কেবলমাত্র আমার মতো লোককে আরও একটি অনুসন্ধান থেকে বাঁচানোর জন্য, রেজেক্স সিস্টেমটিতে রয়েছে e পাঠ্য। রেজিউলার এক্সপ্রেসন নেমস্পেস
এরিক বার

240
bool result = input.All(Char.IsLetter);

bool result = input.All(Char.IsLetterOrDigit);

bool result = input.All(c=>Char.IsLetterOrDigit(c) || c=='_');

5
আমি জানতে আগ্রহী হবে যে আপনার কোনটি দ্রুত (লিনকিউ) বা ফিলিপ লেবার্ট (রেজেক্স) এর একজন?
Nam

4
@nam সিএমইউ উচ্চারণ অভিধানের বিরুদ্ধে পরীক্ষা চালিয়ে যাচ্ছে (কেবলমাত্র সমস্ত অক্ষর, গড় দৈর্ঘ্য 7.৪ অক্ষর), এটি Regexসমস্ত অক্ষরের জন্য সংকলিত তুলনায় ১.৮x দ্রুত এবং বিকল্প (!) Regexসহ সমস্ত অক্ষরের জন্য সংকলিতের চেয়ে 3x গতিযুক্ত IgnoreCase
নেটমেজ

গৃহীত উত্তরটি কমম্পাইলড রেইগেক্স ব্যবহার করে, এটি আরও ধীর হবে। আমি লিনকিউ সমাধানটি পছন্দ করি, এটি পোস্ট করার জন্য ধন্যবাদ :)
বেরেন্ড এঞ্জেলব্রেচট

48

কেবল অক্ষর:

Regex.IsMatch(theString, @"^[\p{L}]+$");

চিঠি এবং সংখ্যা:

Regex.IsMatch(theString, @"^[\p{L}\p{N}]+$");

বর্ণ, সংখ্যা এবং আন্ডারস্কোর:

Regex.IsMatch(theString, @"^[\w]+$");

দ্রষ্টব্য, এই নিদর্শনগুলি আন্তর্জাতিক অক্ষরগুলির সাথেও মিলছে ( a-zকনস্ট্রাক্ট ব্যবহারের বিপরীতে )।


19

আপনারা যারা রিজেক্সের সাথে যেতে চান না এবং .NET 2.0 ফ্রেমওয়ার্কে আছেন (একে একে লিনকুই নেই):

কেবলমাত্র অক্ষর:

public static bool IsAllLetters(string s)
{
    foreach (char c in s)
    {
        if (!Char.IsLetter(c))
            return false;
    }
    return true;
}

কেবল সংখ্যা:

    public static bool IsAllDigits(string s)
    {
        foreach (char c in s)
        {
            if (!Char.IsDigit(c))
                return false;
        }
        return true;
    }

কেবল সংখ্যা বা চিঠিগুলি:

    public static bool IsAllLettersOrDigits(string s)
    {
        foreach (char c in s)
        {
            if (!Char.IsLetterOrDigit(c))
                return false;
        }
        return true;
    }

কেবল সংখ্যা বা চিঠি বা বোঝার জন্য:

    public static bool IsAllLettersOrDigitsOrUnderscores(string s)
    {
        foreach (char c in s)
        {
            if (!Char.IsLetterOrDigit(c) && c != '_')
                return false;
        }
        return true;
    }

8

আমি মনে করি নিয়মিত এক্সপ্রেশন ব্যবহার করা ভাল ক্ষেত্রে:

public bool IsAlpha(string input)
{
    return Regex.IsMatch(input, "^[a-zA-Z]+$");
}

public bool IsAlphaNumeric(string input)
{
    return Regex.IsMatch(input, "^[a-zA-Z0-9]+$");
}

public bool IsAlphaNumericWithUnderscore(string input)
{
    return Regex.IsMatch(input, "^[a-zA-Z0-9_]+$");
}


4

আপনি স্ট্রিংয়ের অক্ষরগুলিতে লুপ করতে পারেন এবং চর মেথড আইসলেটর ব্যবহার করে পরীক্ষা করতে পারেন তবে স্ট্রিং পদ্ধতি সূচিপত্রের সাহায্যে স্ট্রিংয়ের মতো না থাকা অন্যান্য অক্ষরগুলি অনুসন্ধান করতে আপনি একটি কৌশলও করতে পারেন।


1

স্ট্রিং অক্ষরগুলির মধ্য দিয়ে আইট্রেট করুন এবং 'ইসলেটার' এবং 'ইসডিগিত' নামে পরিচিত 'চর' এর ফাংশনগুলি ব্যবহার করুন।

আপনার যদি আরও নির্দিষ্ট কিছু প্রয়োজন হয় - রেজেক্স ক্লাস ব্যবহার করুন।


1

আপনি যদি নবাগত হন তবে আপনি আমার কোড থেকে রেফারেন্স নিতে পারেন .. আমি যা করলাম তা হল একটি চেক লাগানো যাতে আমি কেবল বর্ণমালা এবং সাদা স্পেস পেতে পারি! স্ট্রিংটিকে আবার বৈধতা দেওয়ার জন্য আপনি দ্বিতীয়টির পরে ফর লুপটির পুনরাবৃত্তি করতে পারেন

       bool check = false;

       Console.WriteLine("Please Enter the Name");
       name=Console.ReadLine();

       for (int i = 0; i < name.Length; i++)
       {
           if (name[i]>='a' && name[i]<='z' || name[i]==' ')
           {
               check = true;
           }
           else
           {
               check = false;
               break;
           }

       }

       if (check==false)
       {
           Console.WriteLine("Enter Valid Value");
           name = Console.ReadLine();
       }

0

সম্প্রতি, আমি এমন কোনও ক্রিয়াকলাপের জন্য পারফরম্যান্স উন্নতি করেছি যা এই পৃষ্ঠার সাহায্যে একটি স্ট্রিংয়ে অক্ষরগুলি পরীক্ষা করে।

আমি বুঝতে পেরেছি যে রেজেক্স সহ সমাধানগুলি চর.আইএসলেটরঅরডিজিট চেক সহকারীর চেয়ে 30 গুণ কম ধীর।

আমরা নিশ্চিত ছিলাম না যে এই চিঠিগুলি বা অঙ্কগুলি অন্তর্ভুক্ত করেছে এবং কেবলমাত্র লাতিন অক্ষরের দরকার ছিল তাই আমরা Char.IsLetterOrDigit ফাংশনের বিচ্ছিন্ন সংস্করণের উপর ভিত্তি করে আমাদের ফাংশনটি বাস্তবায়িত করেছি।

আমাদের সমাধানটি এখানে:

internal static bool CheckAllowedChars(char uc)
    {
        switch (uc)
        {
            case '-':
            case '.':
            case 'A':
            case 'B':
            case 'C':
            case 'D':
            case 'E':
            case 'F':
            case 'G':
            case 'H':
            case 'I':
            case 'J':
            case 'K':
            case 'L':
            case 'M':
            case 'N':
            case 'O':
            case 'P':
            case 'Q':
            case 'R':
            case 'S':
            case 'T':
            case 'U':
            case 'V':
            case 'W':
            case 'X':
            case 'Y':
            case 'Z':
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                return true;
            default:
                return false;
        }
    }

এবং ব্যবহারটি এরকম:

 if( logicalId.All(c => CheckAllowedChars(c)))
 { // Do your stuff here.. }

0

চরটি অক্ষর, নম্বর বা স্থান হয় তা যাচাই করার জন্য দয়া করে পদ্ধতিটি সন্ধান করুন, অন্যথায় আন্ডারস্কোর সংযুক্ত করুন (আপনার প্রয়োজন অনুসারে সংশোধন করার জন্য নিখরচায় থাকুন)

public String CleanStringToLettersNumbers(String data)
{
    var result = String.Empty;

    foreach (var item in data)
    {
        var c = '_';

        if ((int)item >= 97 && (int)item <= 122 ||
            (int)item >= 65 && (int)item <= 90 ||
            (int)item >= 48 && (int)item <= 57 ||
            (int)item == 32)
        {
            c = item;
        }

        result = result + c;
    }

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