تشخیص فارسی یا انگلیسی بودن یک رشته در C#

اگر از آن دسته برنامه نویسانی باشید توجه زیادی به رابط کاربری نرم افزار خود دارید احتمال زیادی وجود دارد که در موارد متعددی لازم باشد فارسی یا انگلیسی بودن یک رشته را چک کنید. مثلا لازم است به کاربر خود سلام کنید اگر پیام دهید «سلام Alireza Saberi» زیاد جالب نیست. و یا میخواهید شاخه ای با نام کاربر بسازید و نمی خواهید هیچ کاراکتر غیر اسکی در آن باشد

بسیار خوب برویم سر اصل مطلب و تشخیص فارسی یا انگلیسی بودن رشته آن هم در زبان C#

 

اگر هدف شما رشته  ‌های اسکی هست و هیچ کاراکتر غیر انگلیسی با کد اسکی بزرگتر از ۲۵۵ را قرار نیست قبول کنید این کد کوتاه عالی عمل میکند:

public bool ContainsUnicodeCharacter(string input)
    {
        const int MaxAnsiCode = 255;

        return input.Any(c => c > MaxAnsiCode);
    }

 

اگر هم علاقه دارید فقط اعداد و حروف انگلیسی رو قبول کنید پترن زیر دوای درد شماست:

if( Regex.IsMatch(input, "^[a-zA-Z0-9]*$") )
{ /* کد شما */ }

اگر هم قصد دارید فقط حروف فارسی رو قبول کنید مجبور هستید کاراکتر های فارسی رو به همراه کاراکتر فاصله معرفی کنید و از پترن زیر استفاده کنید:

Regex.IsMatch(input, @"^[\u0600-\u06FF\uFB8A\u067E\u0686\u06AF\u200C\u200F ]+$")

امیدوارم راه گشا باشند