Запретить пробелы в регулярном выражении

Вопрос:У меня есть этот код: private static bool IsTextAllowed(string text) { Regex regex = new Regex("[^0-9]+"); // Regex that matches disallowed text return !regex.IsMatch(text); } private void TextboxClientID_PreviewTextInput(object sender, TextCompositionEventArgs e) { e.Handled = !IsTextAllowed(e.Text); } Это позволяет использовать пробелы в текстовом поле, как предотвратить добавление пробелов? Ответ №1В regex модификатор s преобразуется в [rntf

Вопрос:

У меня есть этот код:

private static bool IsTextAllowed(string text) { Regex regex = new Regex(«[^0-9]+»); // Regex that matches disallowed text return !regex.IsMatch(text); } private void TextboxClientID_PreviewTextInput(object sender, TextCompositionEventArgs e) { e.Handled = !IsTextAllowed(e.Text); }

Это позволяет использовать пробелы в текстовом поле, как предотвратить добавление пробелов?

Ответ №1

В regex модификатор s преобразуется в [rntf ], что означает символы newline, символы tab, символы form feed, form feed (используемые принтерами для запуска новой страницы) и no spaces.

Таким образом, вы можете использовать регулярное выражение [^\s] (вы должны использовать \, чтобы сделать один , который затем переведется на s. Наконец, если вы просто используете s, это будет перевести на буквенный символ s.

Символы начала и конца ^ и $ соответствуют началу и концу строки соответственно.

Итак, вы можете использовать регулярное выражение ^[^0-9\s]+$. Вот разбивка того, что он делает:

  • Первый ^ соответствует началу строки.
  • Затем у нас есть группа, включенная в [], которая будет соответствовать любому одиночному символу в этой группе
  • Внутри [] имеем ^0-9\s:
    • Символ ^ гарантирует, что ни один символ внутри [] не будет сопоставлен (переключает его с любого отдельного символа на один символ), ни одно из следующего не должно быть истинным
    • Часть 0-9 соответствует любому числу от 0 до 9
    • Часть \s создает буквально s. s соответствует любому символу пробела
  • + соответствует группе, включенной в [] между 1 и бесконечным временем
  • Финал $ соответствует концу строки

Ваш код может быть:

private static bool IsTextAllowed(string text){ Regex regex = new Regex(«^[^0-9\s]+$»); return !regex.IsMatch(text); }

Вот тест regex101: https://regex101.com/r/aS9xT0

Ответ №2

Использование:

@»^[^ds]+$»

d… Сопоставьте цифру (0-9).
s… Сопоставьте символ пробела.

private static bool IsTextAllowed(string text) { return Regex.IsMatch(text, @»^[^ds]+$»); } Ответ №3^[^0-9 ]+$

Попробуйте это. Это не разрешит пробелы вообще.

Ответ №4

* НЕ ответ регулярного выражения, у меня была та же проблема с пространством char

Я исправил это, добавив PreviewKeyDown в TextBox и установив e.Handled в true, если была нажата пробел, например:

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e) { e.Handled = e.Key == Key.Space; } Ответ №5

Почему вы беспокоитесь о регулярном выражении? Просто используйте:

private static bool IsTextAllowed(string text) { return text.All(c => !char.IsWhiteSpace(c)); }

Оцените статью
Добавить комментарий