2015-06-27 4 views
0

Я хочу, чтобы текстовое поле принимало только персидский алфавит и не принимало никаких знаков в C#. Может ли кто-нибудь помочь мне с кодом?Я хочу ограничить свой текстовый ящик персидским алфавитом, как я могу это сделать? В C#

+0

Пожалуйста, добавьте некоторый код, вы хотите ограничить ввод во внешнем виде через JS/Jquery? Какую настройку вы используете? –

+2

Какое текстовое поле? WinForms? ASP.NET? WPF? Что вы подразумеваете под «не понимаете никаких признаков»? что ты уже испробовал? –

+0

обычный текстовый ящик в winform в C#, знаки вроде: & ^% $ # –

ответ

1

Вы должны добавить событие для своего текстового поля. То, что вы хотите, - это событие KeyPress.

см. Этот учебник в DotNet Perls.

C# TextBox Tutorial: TextChanged and KeyDown

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    e.Handled = !e.KeyChar <= 'BiggestPersianChar' && !e.KeyChar >= 'SmallesPersianChar'; 
} 

В настоящее время я не знаю Biggest персидская полукокса и самый маленький. но я надеюсь, что вы это знаете.

Edit:

Я думаю, что это самый большой и самый маленький символ. Большим и маленьким я имею в виду его Юникод.

e.Handled = !e.KeyChar <= 'ی' && !e.KeyChar >= 'ا'; 
+0

неважно большой или маленький, просто быть персидским –

+0

я знаю. каждый символ имеет код 'ascii'. Например, код ascii 'A' равен' 65'. когда вы нажимаете клавишу на клавиатуре, вы должны проверить это, если этот символ находится в диапазоне персидского алфавита или нет. поэтому вы скажете 'e.KeyChar <= ی' и' e.KeyChar> = 'ا''. означает 'e.KeyChar' (Ключ, который вы нажали) должен находиться между ی и ا и не принимает никакое другое слово или знак. Но для этого вы должны определить это событие для текстового поля. см. учебник @FatemehHojjati –

+0

извините. Персидские символы не имеют ascii-кода. они имеют Unicode. см. ответ Bahman_Aries. однако это решение по-прежнему остается верным! @FatemehHojjati –

3

Это, вероятно, что вы ищете:

// Only allows "Persian characters" and "Space". 
private void TextBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!Regex.IsMatch(e.KeyChar.ToString(), @"\p{IsArabic}") 
     && !string.IsNullOrWhiteSpace(e.KeyChar.ToString())) 
     e.Handled = true; 
} 

// Only allows "Persian characters", "Space" and "Numbers". 
private void TextBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!Regex.IsMatch(e.KeyChar.ToString(), @"\p{IsArabic}") 
     && !string.IsNullOrWhiteSpace(e.KeyChar.ToString()) 
     && !char.IsDigit(e.KeyChar)) 
     e.Handled = true; 
} 

Конкретные наборы символов в стандарте Unicode занимают определенный диапазон или блок последовательных кодовых точек. Например, базовый набор латинских символов находится от \u0000 до \u007F, тогда как набор символов арабского языка находится от \u0600 до \u06FF. Регулярное выражение построить

\p{ name } 

соответствует любому символу, который принадлежит к общей категории Юникода или именованного блока.

Подробнее о блоке Unicode here.

+1

Это правда. Но вам нужно также определить событие для текстового поля. в противном случае этот метод остается бесполезным. +1 для Regex и '' \ p {IsArabic} "' –

+0

Это очень верно:) –

+0

Что такое Regex ??? –

Смежные вопросы