এর মধ্যে কেবলমাত্র বর্ণানুক্রমিক অক্ষরের অনুমতি দেওয়ার জন্য আমি কীভাবে কোনও স্ট্রিংকে বৈধতা দিতে পারি?


117

এর মধ্যে কেবলমাত্র বর্ণানুক্রমিক অক্ষরের অনুমতি দেওয়ার জন্য আমি কীভাবে কোনও স্ট্রিংকে নিয়মিত এক্সপ্রেশন ব্যবহার করে যাচাই করতে পারি?

(আমি কোনও জায়গার জন্যও অনুমতি দিতে চাই না)।

উত্তর:


181

নিম্নলিখিত প্রকাশটি ব্যবহার করুন:

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

অর্থাৎ,

using System.Text.RegularExpressions;

Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(SomeString)) {
  ...
}

জাভাস্ক্রিপ্ট সম্পর্কে, একই জিনিস আমি অনুমান?
mrblah

4
আপনি যদি ডাটাবেসের নাম বা এর মতো অভ্যন্তরীণ কিছু স্যানিটাইজ করেন তবে এটি ইংরেজী ভাষী দেশে না চালালে আপনার কোনও খেয়াল হবে না।
অগ্নিয়ান দিমিত্রভ

15
আমি নিয়মিত অভিব্যক্তি ঘৃণা করি। আমি জানি যে আমি সিনট্যাক্সটি কখনই মনে করব না। এমনকি যদি আমি এটি অধ্যয়ন করি তবে শীঘ্রই এমন একটি সময় আসবে যখন সমস্ত আবার ভুলে যায়।
সেন্টিনেল

1
@Phil। হতে পারে, তবে ততক্ষণে আমি এমন কাউকে প্রতিনিধি দেব যা নিয়মিত ভাব প্রকাশ করে ;-)
সেন্টিনেল

3
বলা হয়েছে, "আপনি যদি নিয়মিত ভাব প্রকাশের মাধ্যমে সমস্যাটি সমাধান করেন তবে আপনার দুটি সমস্যা আছে।"
ও জোনস

205

.NET 4.0 এ আপনি লিনকিউ ব্যবহার করতে পারেন:

if (yourText.All(char.IsLetterOrDigit))
{
    //just letters and digits.
}

yourText.Allকার্যকর করা বন্ধ করে দেয় এবং falseপ্রথমবারের char.IsLetterOrDigitরিপোর্টগুলি ফিরিয়ে দেবে falseকারণ চুক্তিটি তখন সম্পূর্ণ Allহতে পারে না।

বিঃদ্রঃ! এই উত্তরটি কঠোরভাবে বর্ণমালা পরীক্ষা করে না (যা সাধারণত এজেড, এজ এবং 0-9 হয়)। এই উত্তরটি স্থানীয় চরিত্রগুলিকে পছন্দ করে åäö

আপডেট 2018-01-29

উপরের সিনট্যাক্সটি কেবল তখনই কাজ করে যখন আপনি একটি একক পদ্ধতি ব্যবহার করেন যা সঠিক ধরণের একক যুক্তিযুক্ত (এই ক্ষেত্রে char)।

একাধিক শর্ত ব্যবহার করার জন্য আপনাকে এই জাতীয় লেখার দরকার রয়েছে:

if (yourText.All(x => char.IsLetterOrDigit(x) || char.IsWhiteSpace(x)))
{
}

1
এটি খুব দ্রুত না হলে আমি অবাক হব। সংকলন বা মূল্যায়ন করার জন্য কোনও রেজেক্স নেই, কেবল একটি সহজ তুলনা।
jgauffin

3
এখন এটি কেবল সুন্দর, সরল এবং সাধারণ।
সেন্টিনেল

3
আপনার পাঠ্যটি অবশ্যই বর্ণমালায় রয়েছে তা নিশ্চিত করতে চাইলে কি এটি ব্যর্থ হবে না? এটি হয় সমস্ত অঙ্ক বা সমস্ত বর্ণমালা হতে পারে তবে এখনও এই শর্তটি সন্তুষ্ট করে।
এরবলুর

2
@ আইসবালুর: হ্যাঁ, তবে প্রশ্নটি ছিল না।
jgauffin

2
আমি মনে করি এই উত্তরটি ঠিক স্পষ্টই ভুল, ধরে নেওয়া হচ্ছে বর্ণমালার সেটটি এজেড, এজেড এবং 0-9 কারণ এটি ইউনিকোডের অক্ষর এবং অঙ্কগুলির পুরো পরিসরকে অন্তর্ভুক্ত করে, এতে লাতিন-সহ অন্যান্য অক্ষরও রয়েছে। উদাহরণস্বরূপ, char.IsLetterOrDigit('ก')ফিরে আসবে truecsharppad.com/gist/f96a6062f9f8f4e974f222ce313df8ca
tia

34

আপনি এটি কোনও রেগেক্সের চেয়ে এক্সটেনশন ফাংশন দিয়ে সহজেই করতে পারেন ...

public static bool IsAlphaNum(this string str)
{
    if (string.IsNullOrEmpty(str))
        return false;

    for (int i = 0; i < str.Length; i++)
    {
        if (!(char.IsLetter(str[i])) && (!(char.IsNumber(str[i]))))
            return false;
    }

    return true;
}

প্রতি মন্তব্য :) ...

public static bool IsAlphaNum(this string str)
{
    if (string.IsNullOrEmpty(str))
        return false;

    return (str.ToCharArray().All(c => Char.IsLetter(c) || Char.IsNumber(c)));
}

2
এটি স্বাদের বিষয় হতে পারে তবে আমি লুপটিকে "ফরচ (সিআর তে চর সি) as ...}" হিসাবে প্রকাশ করব। কোনও খালি স্ট্রিং ঠিক আছে হিসাবে বিবেচনা করা উচিত কিনা তা অ্যাপ্লিকেশানের উপর নির্ভর করে, তাই আমি এটিটি গ্রহণ করব। আমি এ জাতীয় তুচ্ছ রুটিনে 6 টি খালি লাইন প্যাডও করব না, তবে আমি অনুমান করি যে এটি সি # / জাভা / সি ++ স্টাইল the কোডারগুলি পর্দার রিয়েল এস্টেট দ্বারা প্রদত্ত বলে মনে হচ্ছে। যাইহোক, এটি সঠিক দিক, সুতরাং +1।
সোভান্তে

3
আমি মনে করি চাই আমরা বরং ISNUMBER চেয়ে এই অবস্থায় IsDigit ব্যবহার করতে চান থাকব - ISNUMBER সত্য ফিরে আসবে সংখ্যা, অথবা জিনিস জন্য যে বর্ণন সংখ্যা (ভগ্নাংশ, রোমান সংখ্যাসমূহ, ইত্যাদি মত .; দেখতে msdn.microsoft.com/ এন-ইউএস / লাইব্রেরি / yk2b3t2y.aspx )। এটি দেওয়া হয়েছে, এবং যদি কেউ বিশেষত খারাপ লাগছে, তবে কেউ ইসাল্ফনামের বিষয়বস্তু আরও সংকোচিত করতে পারে: স্ট্রিং রিটার্ন করুন sIsNullOrEmpty (str)? মিথ্যা: str.ToCharArray ()। All (Char.IsLetterOrDigit);
স্ট্যাক করুন

4
নোট করুন যে Char.IsLetter a-zA-Z ব্যতীত অন্য "অক্ষর" এর জন্য সত্যকে মূল্যায়ন করবে। উদাহরণস্বরূপ, জাপানি あ, চাইনিজ 的, কোরিয়ান 한 ইত্যাদি ইউনিকোডকে "অক্ষর" হিসাবে বিবেচনা করা হয়। যদি এটি আপনার উদ্দেশ্য হয় তবে জরিমানা, তবে অন্যান্য উত্তরে বিভিন্ন রেজেক্স অভিব্যক্তিগুলি থেকে বিচার করা, সম্ভবত এটি আলফা [সংখ্যাসূচক] হিসাবে সবচেয়ে বেশি বিবেচিত নয়।
ডোনা

আমার ক্ষেত্রে, ইসলেটর এবং ইসনম্বরের পাশাপাশি আমারও ইসওয়াইটস্পেসের প্রয়োজন ছিল তাই আমি এটিকে আপনার কোডে যুক্ত করেছি এবং এটি পুরোপুরি কাজ করেছে!
বেন জুনিয়র

char.IsLetterOrDigitপরিবর্তে ইসলেটার + ইসনম্বার ব্যবহার করুন
নিক_ন_এ

17

যদিও আমি মনে করি রেগেক্স-ভিত্তিক সমাধানটি সম্ভবত আমি যেভাবে চলেছি, তবে আমি এটিকে এক প্রকারের মধ্যে আবদ্ধ করতে প্ররোচিত করব।

public class AlphaNumericString
{
    public AlphaNumericString(string s)
    {
        Regex r = new Regex("^[a-zA-Z0-9]*$");
        if (r.IsMatch(s))
        {
            value = s;                
        }
        else
        {
            throw new ArgumentException("Only alphanumeric characters may be used");
        }
    }

    private string value;
    static public implicit operator string(AlphaNumericString s)
    {
        return s.value;
    }
}

এখন, যখন আপনার কোনও বৈধযুক্ত স্ট্রিং দরকার হয়, তখন আপনার কাছে পদ্ধতিটির স্বাক্ষরটির জন্য একটি আলফা নিউমারিক স্ট্রিং প্রয়োজন হতে পারে এবং জেনে রাখুন যে আপনি যদি এটি পান তবে এটি বৈধ (নাল বাদে)। যদি কেউ অ-বৈধতাযুক্ত স্ট্রিংয়ে যাওয়ার চেষ্টা করে তবে এটি একটি সংকলক ত্রুটি তৈরি করবে।

আপনি যদি মনোযোগ দেন তবে আপনি সমস্ত সাম্যতা অপারেটরগুলি বা আলফা নিউমারিক স্ট্রিংয়ের স্পষ্ট কাস্ট প্রয়োগ করতে পারেন to


আমি এই পদ্ধতির কখনও দেখিনি, তবে আমি অভিপ্রায়টির স্পষ্টতা এবং আপনার ন্যায়সঙ্গততা পছন্দ করি। +1 টি।
কোরি হাউস

1
এইটা আমার কাছে নতুন। আমি static public implicit operator stringঅংশটি বোঝার চেষ্টা করছি
হাসান গুলজার

8

আমার এজেড, এজেড, 0-9 পরীক্ষা করা দরকার; কোনও রেজেক্স ছাড়াই (যদিও ওপি রিজেক্সের জন্য জিজ্ঞাসা করে)।

এখানে বিভিন্ন উত্তর এবং মন্তব্য মিশ্রন করা এবং https://stackoverflow.com/a/9975693/292060 থেকে আলোচনা , বর্ণ বা অঙ্কের জন্য এই পরীক্ষাগুলি, অন্যান্য ভাষার বর্ণগুলি এড়ানো এবং ভগ্নাংশের অক্ষরের মতো অন্যান্য সংখ্যাগুলি এড়ানো।

if (!String.IsNullOrEmpty(testString)
    && testString.All(c => Char.IsLetterOrDigit(c) && (c < 128)))
{
    // Alphanumeric.
}

4

^\w+$ অনুমতি প্রদান করা হবে a-zA-Z0-9_

^[a-zA-Z0-9]+$আন্ডারস্কোর বাতিল করতে ব্যবহার করুন ।

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


"-" ড্যাশ চরকে অনুমতি দেওয়ার জন্য আমি কীভাবে আপনার ^ \ w + change পরিবর্তন করতে পারি?
নীল ডেভিস

@ নিলেনডাভিস^[\w-]+$
জাচাফার

2

স্ট্রিংটি অক্ষর এবং অঙ্কের উভয় সমন্বয় কিনা তা পরীক্ষা করার জন্য, আপনি। নেট 4.0 এবং লিনকিউ ব্যবহার করে নীচে @ jgauffin উত্তরটি পুনরায় লিখতে পারেন:

if(!string.IsNullOrWhiteSpace(yourText) && 
yourText.Any(char.IsLetter) && yourText.Any(char.IsDigit))
{
   // do something here
}

এটি আলফানিউমেরিক সহ অন্যান্য অক্ষর যুক্ত স্ট্রিংকে ভুলভাবে সনাক্ত করবে ...
nsimeonov

1

এখানে যেমন একই উত্তর ।

যদি আপনি একটি নন-রেজেক্স এএসসিআইআই A-z 0-9চেক চান, আপনি char.IsLetterOrDigit()অন্যান্য ইউনিকোডের অক্ষরগুলি অন্তর্ভুক্ত হিসাবে ব্যবহার করতে পারবেন না ।

আপনি যা করতে পারেন তা হল চরিত্রের কোড ব্যাপ্তিগুলি যাচাই করা।

  • 48 -> 57 হল সংখ্যাসূচক
  • 65 -> 90 হ'ল মূল অক্ষর
  • 97 -> 122 ছোট হাতের অক্ষর letters

নিম্নলিখিতটি আরও কিছুটা ভার্বোজ, তবে এটি কোড গল্ফের চেয়ে বোঝার স্বাচ্ছন্দ্যের জন্য।

    public static bool IsAsciiAlphaNumeric(this string str)
    {
        if (string.IsNullOrEmpty(str))
        {
            return false;
        }

        for (int i = 0; i < str.Length; i++)
        {
            if (str[i] < 48) // Numeric are 48 -> 57
            {
                return false;
            }

            if (str[i] > 57 && str[i] < 65) // Capitals are 65 -> 90
            {
                return false;
            }

            if (str[i] > 90 && str[i] < 97) // Lowers are 97 -> 122
            {
                return false;
            }

            if (str[i] > 122)
            {
                return false;
            }
        }

        return true;
    }

0

ক্লিটাসের উত্তরের ভিত্তিতে আপনি নতুন এক্সটেনশন তৈরি করতে পারেন।

public static class StringExtensions
{        
    public static bool IsAlphaNumeric(this string str)
    {
        if (string.IsNullOrEmpty(str))
            return false;

        Regex r = new Regex("^[a-zA-Z0-9]*$");
        return r.IsMatch(str);
    }
}

-8

.NET ফ্রেমওয়ার্কে কোডটি তৈরি এবং অন্তর্নির্মিত উপর নির্ভর না করার পরামর্শ দিচ্ছি, নতুন সমাধান আনার চেষ্টা করুন .. এটি আমি যা করি ..

public  bool isAlphaNumeric(string N)
{
    bool YesNumeric = false;
    bool YesAlpha = false;
    bool BothStatus = false;


    for (int i = 0; i < N.Length; i++)
    {
        if (char.IsLetter(N[i]) )
            YesAlpha=true;

        if (char.IsNumber(N[i]))
            YesNumeric = true;
    }

    if (YesAlpha==true && YesNumeric==true)
    {
        BothStatus = true;
    }
    else
    {
        BothStatus = false;
    }
    return BothStatus;
}

2
আপনি কি দয়া করে আপনার কোডটিতে কিছু ব্যাখ্যা যুক্ত করতে পারেন, কেবল ডাম্পিং কোডটি এখানে সাধারণত বর্ধিত হয়
ড্রইকন

এছাড়াও তারা নিয়মিত প্রকাশের জন্য জিজ্ঞাসা করেছিলেন, এটি কোনও নিয়মিত প্রকাশ নয়
ড্রইকন

মন্তব্য এবং পর্যবেক্ষণের জন্য ধন্যবাদ .. যেহেতু আমি পরামর্শ দিয়েছি কোড লেখার জন্য আমার নিজস্ব নিজস্ব পদ্ধতি রয়েছে।
মাহদী আল আরাদি

5
প্রাক বিল্ড কোডের উপর নির্ভর না করার বিষয়ে আপনার মন্তব্য। নেটটি কিছুটা বোঝায় না, অবশ্যই যদি আপনি প্রাক-বিল্ড কোডের উপর নির্ভর না করেন তবে আপনাকে সেই char.IsNumber()পদ্ধতিটি প্রাক-বিল্ট কোড হিসাবে ব্যবহার করা উচিত নয় ?
Draken

4
এই কোডটি কেন নিজেকে পুনরায় উদ্ভাবন করা খুব খারাপ ধারণা - এটি আসলে আপনি যা করতে চান তা করেন না! ("@ 1a" স্ট্রিংটি ভুলভাবে ফিরে আসবে, "এ" স্ট্রিংটি মিথ্যা ফিরে আসবে)
ফ্লেক্সো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.