Вопрос:
У меня есть этот код:
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)); }