Regex help: положительное десятичное число, 2 места - PullRequest
1 голос
/ 10 сентября 2010

Я борюсь с проблемой регулярных выражений. Требование: десятичные дроби до двух знаков, отличных от нуля и не отрицательных.

Это ненулевое, которое получает меня.

Допускается все, что угодно, например 0,01, 0,99, 99999999,99 Однако отрицательные числа, а также 0, 0,0 или 0,00 не допускаются ...

Я думал, что получаю куда-то, но это неправильно

^(?!(0)|(0\.0)|(0\.00))[+]?\d+(\.\d|\.\d[0-9])?$

Это соответствует десятичным знакам и положительным числам в порядке, но я пытаюсь не совпадать, если он находит 0, 0.0 или 0.00, но приведенное выше ищет суффикс, и это не правильно, поскольку он идет не так для 0.1, 0.01 и т. Д.

Есть ли какие-нибудь эксперты по регулярным выражениям?

Ответы [ 4 ]

2 голосов
/ 10 сентября 2010

Ошибка, которую вы сделали, заключается в том, что вы не привязываетесь к объекту Lookahead.Ваше регулярное выражение запрещает все, что начинается с нуля.Попробуйте вместо этого:

^(?!(?:0|0\.0|0\.00)$)[+]?\d+(\.\d|\.\d[0-9])?$
                    ^
                 anchored

Вы можете упростить \.\d|\.\d[0-9] до \.\d[0-9]?.

Я также не понимаю, почему вы иногда используете \ d, а иногда [0-9].Будьте последовательны.

0 голосов
/ 10 сентября 2010

Если я хорошо понимаю ваши потребности, я сделаю это:

/ ^ \ d +. (\ D [1-9] | [1-9] 0) $ /

Соответствует любому числу с десятичной частью от 01 до 99

0 голосов
/ 10 сентября 2010

Исходя из моего понимания ваших требований, мне это нравится больше, чем регулярное выражение в целом.

C #

public bool IsValid( string number )
{
    return decimal.Parse(number) > 0 && Regex.IsMatch( number, @"\.\d{2}" );
}
0 голосов
/ 10 сентября 2010
\+?(\d*[1-9]\d*.\d*|0?\.([1-9]\d*|0[1-9]\d*|00[1-9]\d*))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...