Member 10410972 Ответов: 4

Регулярные выражения для textbox1 ? C#


Привет,

Могу ли я ограничить свой textBox1 только тем, что принимаю: цифры, заглавные буквы и -?
Я хочу, чтобы в текстовое поле 1 можно было ввести только :

1. числа (0-9)
2. только заглавный английский
3. -
(все остальные символы не включены)
Спасибо.

Что я уже пробовал:

private void textBox1_TextChanged(object sender, EventArgs e)
{           
   if (System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, @"^[a-zA-Z][a-zA-Z0-9\'\'-']))
    {
        
    }
    
}

Garth J Lancaster

подумайте о том, что у вас здесь ^[a-zA-Z][a-zA-Z0-9\'\' -']

против ваших требований

Цифры (0-9)
Только Заглавные Английские
-

как класс символов он выглядит следующим образом (разбит на строки для удобства чтения)

[//начало
0-9 / / цифры 0-9
A-Z / / только заглавный английский
\ - //Сбежал '-'
] / / Конец урока

ie [0-9A-Z\-]

но ваш шаблон еще не завершен - вам нужно указать ," сколько символов " разрешено - то есть, если разрешены нули, вы можете использовать

[0-9A-Z\-]*

где " * " означает ноль или более раз

или

[0-9A-Z\ -]+

где " + "означает 1 или более раз - хорошее регулярное выражение "шпаргалка" находится здесь https://www.mikesdotnetting.com/article/46/c-regular-expressions-cheat-sheet

4 Ответов

Рейтинг:
2

Graeme_Grant

[редактировать: добавлено черточки]
Почему регулярные выражения?

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsDigit(e.KeyChar) && !(e.KeyChar >= 'A' && e.KeyChar <= 'Z') && e.KeyChar != '-')
    {
        e.Handled = true;
    }
}

Но если вам нужны регулярные выражения, используйте ""\b[A-Z0-9]+(?:-[A-Z0-9]+)+""


Member 10410972

Большое вам спасибо, проблема решена!

Рейтинг:
2

OriginalGriff

Попробуйте это регулярное выражение:

[^a-zA-Z0-9\-]

Если он совпадает, то ваше текстовое поле содержит недопустимый символ.
Вы можете использовать Regex. Replace, чтобы удалить их:
textBox1.Text = Regex.Replace(textBox1.Text, "[^a-zA-Z0-9\-]", "");
Но вам придется быть осторожным с позицией каретки, если вы хотите, чтобы пользователь был счастлив - вы можете получить и установить ее с помощью свойства SelectionStart.

Не используйте этот код в событии TextChanged, не проверив, нужен ли он! Вы получите бесконечный цикл...


Member 10410972

Большое вам спасибо, проблема решена!

OriginalGriff

Пожалуйста!

Рейтинг:
1

Thomas Daniels

Добавить а KeyPress обработчик событий с этим кодом:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar != (char)Keys.Back && !char.IsDigit(e.KeyChar) && !char.IsUpper(e.KeyChar) && e.KeyChar != '-')
    {
        e.Handled = true;
    }
}

Как это работает: если символ-это не пробел, не цифра, не заглавная буква и не буква А -, затем e.Handled имеет значение true, что означает, что событие будет считаться "обработанным" и символ не будет добавлен в текстовое поле.


Member 10410972

Большое вам спасибо, проблема решена!

Рейтинг:
1

Patrice T

Всего несколько ссылок, которые помогут вам работать с регулярными выражениями.

Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
Это показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]


Graeme_Grant

опоздал на вечеринку...

Patrice T

Вот почему я давал только полезные ссылки ! :)

Graeme_Grant

:)