Регулярные выражения в WPF - PullRequest
0 голосов
/ 04 декабря 2018

Я знаю, что уже есть какие-то посты, которые пытаются объяснить строку RegEx.но я все еще не понимаюВ моем случае мне нужно регулярное выражение для WPF, которое допускает только «Цифровая клавиатура».Это здесь в коде:

private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
{
  Regex regex = new Regex("[-+]?[0-9]*,?[0-9]*");
  e.Handled = regex.IsMatch(e.Text);
}

, так что вот несколько примеров-номеров, мне нужно разрешить: «1» или «-1» или «-0,5» или «4,00» или"-3,56" или "3,3" или

"'-2," как -2,0 "или" -2 ""

(поэтому все между -От 4 до +4. Может быть запятая, но это не обязательно. Если есть запятая, она должна быть на одну или две цифры позади - не больше. Это также должно быть "," не "." -это важно) Кто-нибудь знает, как написать эту строку RegEx?спасибо

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Существует несколько сайтов для тестирования регулярных выражений, которые разбивают строку соответствия и предоставляют объяснения для каждого элемента, например, https://regex101.com/

В вашем случае вам нужно

optional '+' or '-'
either
    a group consisting of 
        '4' 
        optionally followed by a group consisting of 
            ',' and one or two '0'
or 
    a group consisting of  
        one character from '0' .. '3'   
        optionally followed by a group consisting of 
            ',' and one or two characters from '0' to '9'


[+-]?(?:(?:4(?:,0{1,2})?)|(?:[0-3](?:,[0-9]{1,2})?))
0 голосов
/ 04 декабря 2018
string s = "-3,5;10;8.5;0;2;3.5;1,5";
string pattern = @"^-?[0-4](,\d{1,2})?$";
foreach(var num in s.Split(";"))
{
    Console.WriteLine($"Num: {num}, Matches: {Regex.IsMatch(num, pattern)}");
}
0 голосов
/ 04 декабря 2018

Разбить его, то, что вы ищете, не так уж сложно.

Во-первых, ваш максимальный / минимальный диапазон от -4 до 4. Учитывая десятичный раздел, вы можете иметь следующее: ^[+-]?4(,0{1,2})?$.Таким образом, здесь мы ожидаем + или - (необязательно), число 4, за которым, возможно, следуют запятая и один или два 0.

В вашем случае нам теперь нужно сопоставитьсередина вашего диапазона, то есть от -3,99 до 3,99.Это может быть достигнуто следующим образом: ^[+-]?[0-3](,\d{1,2})?$.В этом случае мы также ожидаем + или - (опционально).Затем мы ожидаем совпадения цифры от 0 до 3, за которой необязательно следуют запятая и 1 или 2 цифры.

Комбинируя их, мы получим что-то вроде этого: ^[+-]?((4(,0{1,2})?)|([0-3](,\d{1,2})?))$.Пример доступен здесь .

РЕДАКТИРОВАТЬ: Согласно комментариям, вам необходимо экранировать косую черту перед \d, потому что компилятор C # попытается инайдите особое значение для \d, точно так же, как когда вы делаете \n или \t.Самый простой способ - использовать символ @, так что компилятор C # угрожает строке как литералу: Regex regex = new Regex(@"^[+-]?((4(,0{1,2})?)|([0-3](,\d{1,2})?))$");.

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