Я новичок в программировании, и я пытаюсь создать текстовое поле, которое принимает только буквы и цифры. Я искал решения, но не могу найти то, что хочу. Это то, что я сделал до сих пор:
private void TB1_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == VirtualKey.Space)
{
e.Handled = true;
}
var regex = new Regex(@"[^a-zA-Z0-9\s]");
if (regex.IsMatch(e.Key.ToString()))
{
e.Handled = true;
}
}
Я могу удалить числа в регулярное выражение, чтобы пользователь не вводил специальные символы, но это также ограничивает их при наборе цифр. Это текстовое поле будет частью приложения для магазина Windows 8, и я использую С#. Надеюсь, кто-то может мне помочь. Благодарю!
РЕДАКТИРОВАТЬ:
Я должен отказаться от ограничения ввода пользователем специальных символов в текстовое поле, потому что я не приближаюсь к нему. Я сделал то, что использовал свой первый код, но с некоторыми изменениями.
private void TB1_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == VirtualKey.Enter)
{
var regex = new Regex(@"[^a-zA-Z0-9\s]");
if (regex.IsMatch(TB1.Text))
{
t1.Text = "Can't contain special characters.";
}
}
}
Вместо использования с клавиатуры при тестировании в "Исмахе" я использовал текст в текстовом поле. Этот оператор if будет фильтроваться, если в текстовом поле присутствуют другие символы, кроме чисел и букв, поэтому я создал текстовый блок, который будет комментировать, что там есть специальный символ в текстовом поле.
Если вы хотите использовать Regex, используйте следующее выражение регулярного выражения для соответствия.
^[a-zA-Z0-9]*$
Пример использования:
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(SomeString))
{
...
}
Введите следующую строку в событии KayPress текстового поля. Он не позволит пользователю вводить алфавит или любую цифру. Доступны только символы:
e.Handled = char.IsLetter(e.KeyChar) || char.IsDigit(e.KeyChar) ? false:true;
образец кода:
private void yourTextBoxName_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = char.IsLetter(e.KeyChar) || char.IsDigit(e.KeyChar) ?false:true;
}
Мой предыдущий ответ был неправильным, потому что я допустил ошибку в том, как работает VirtualKey (это не значение char).
Виртуальные ключи имеют определенное значение для любого числа, которое равно 0 -9, а нижний регистр A (a) и верхний регистр A (A) имеют одинаковое число, поэтому я сожалею, если сначала привел вас в неправильном направлении.
if(e.Key >= VirtualKey.Number0 && e.Key <= VirtualKey.Z) e.Handled = false;
Этот код должен проверить, что ваше значение ключа выше или равно значению для Number0 (48) и ниже или равно Z | z (90).
Вы можете узнать больше о VirtualKey здесь