Regex Replace - TextBox Text только для включения плавающих значений - PullRequest
0 голосов
/ 01 февраля 2012

Пересмотренный

Я пытаюсь создать выражение регулярного выражения, которое анализирует числа с плавающей запятой.

  1. Максимум 1 отрицательный (-)
  2. Не более 1 десятичного знака (.)
  3. Не более 3 цифр слева от десятичного числа
  4. Не более 3 цифр справа от десятичного числа

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

Regex regex = new Regex(@"^(([\-]?|[\.]?|[\-\.]?|[0-9]?)([0-9]{0,3}))");
bool isMatch = regex.IsMatch(text);

Тем не менее, такие входные данные, как "-", все еще проходят

Ответы [ 3 ]

3 голосов
/ 02 февраля 2012

Если вам нужно сделать регулярное выражение:

Как насчет ^ - {0,1} \ d {0,3} (?:. {0,1} (? <=.) \ D {0,3})? $ </p>

Вот некоторые тестовые значения

относительно события onchange.Я не знаю, какой формат вы используете.В MVVM привязка будет препятствовать неправильному изменению коробки.В формах окон вам придется изменить это самостоятельно.Я бы сказал, хранить значение всякий раз, когда это хорошо для частной собственности.Затем, если изменение недействительно, вернитесь к предыдущему значению.

дополнительно, тест в c #

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            Regex rx = new Regex(@"^-{0,1}\d{0,3}(?:\.{0,1}(?<=\.)\d{0,3})?$");
            List<string> testStrings = new List<string>()
            {
                "100",
                "100.100",
                "1000.0000",
                "100000",
                "-1",
                "-1.234",
                "--",
                "100.100ab",
                "1,234.1",
                "1,234",
                "abc",
                "abc123.123",
                "abc.def"
            };
            foreach(var str in testStrings)
            {
                Console.WriteLine(string.Format("{0} = {1}", str, rx.IsMatch(str)));
            }
            Console.ReadLine();
        }
    }
}
1 голос
/ 02 февраля 2012

Если вы следуете решению mbeckish с помощью TryParse и подключаете его к событию Validating http://msdn.microsoft.com/en-us/library/system.windows.forms.control.validating.aspx,, вам следует идти вперед.

Если вам нужно использовать регулярные выражения (что вы можете, если вы делаете это при каждом нажатии клавиши), вы можете использовать это, который работал для меня в прошлом:

^ -? \ D * \ (\ D + [еЕ]?? [- +] (\ d {1,3})).? $ * +1007 *

В соответствии с вашими требованиями к количеству цифр вы можете заменить \ d * и \ d + на \ d {0,3} и \ d {1,3} соответственно.

0 голосов
/ 02 февраля 2012

Вместо регулярных выражений вы можете использовать Single.TryParse, чтобы убедиться, что строка является допустимым представлением с плавающей запятой одинарной точности.

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