Как отфильтровать определенные комбинации? - PullRequest
1 голос
/ 26 марта 2019

Я пытаюсь отфильтровать ввод TextBox с помощью Regex. Мне нужно до 3 цифр перед десятичной запятой и мне нужно 2 после нее. Это может быть в любой форме.

Я пытался изменить команды regex, но это приводит к ошибкам, и отдельные входы не будут действительными. Я использую TextBox в WPF для сбора данных.

bool containsLetter = Regex.IsMatch(units.Text, "^[0-9]{1,3}([.] [0-9] {1,3})?$");
if (containsLetter == true)
{
    MessageBox.Show("error");
}
return containsLetter;

Я хочу, чтобы фильтр регулярных выражений принимал следующие типы входных данных:

111.11,
11.11,
1.11,
1.01,
100,
10,
1,

1 Ответ

1 голос
/ 26 марта 2019

Как уже упоминалось в комментарии, пробелы - это символы, которые будут интерпретироваться буквально в вашем шаблоне регулярных выражений.

Поэтому в этой части вашего регулярного выражения:

([.] [0-9] {1,3})

  • ожидается пробел между . и [0-9],
  • то же самое относится и к [0-9], где регулярное выражение будет соответствовать 1 до 3 пробелов.

При этом для удобства чтения у вас есть несколько способов построить ваше регулярное выражение.

1) Поместите комментарии в регулярное выражение:

string myregex = @"\s" // Match any whitespace once
+ @"\n"  // Match one newline character
+ @"[a-zA-Z]";  // Match any letter

2) Добавьте комментарии в свое регулярное выражение, используя синтаксис (?#comment)

needle(?# this will find a needle)

Пример

3) Активировать режим свободного пробела в вашем регулярном выражении:

nee # this will find a nee...
dle # ...dle (the split means nothing when white-space is ignored)

doc: https://www.regular -expressions.info / freespacing.html

Пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...