Регулярное выражение для ограниченного десятичного числа

#c# #regex

#c# #регулярное выражение

Вопрос:

Здесь новый синтаксис регулярных выражений. Пытаюсь написать регулярное выражение, чтобы обеспечить некоторую проверку входных данных.

Что мне нужно, так это регулярное выражение для сопоставления с целым числом или десятичным числом ровно с одной цифрой после десятичного числа.

 Good Match
1
12
100
1.1
100.1
1.0

No Match
1.22
1.
0
012
  

Вот что я придумал, но это не работает:

 Regex.IsMatch(paidHours, "\d [.]?[0-9]?")
  

Ответ №1:

Вы можете попробовать с:

 Regex.IsMatch(paidHours, "^\d (\.\d)?$")
  

Комментарии:

1. 1 для шаблона. Я бы посоветовал вам добавить якоря, чтобы избежать возможного a1.11bc .

Ответ №2:

 Regex.IsMatch(paidHours, @"^d (.d)?$")
  

Ответ №3:

Отредактированный ответ после редактирования вопроса OP.

 Regex.IsMatch(paidHours, @"^[1-9][0-9]*(.[0-9])?$");
  

Объяснение:

 ^      : Start of the String
[1-9]  : A single number between 1 and 9
[0-9]* : Zero or more number(s) between 0 and 9 
         ([0-9]? would match zero or one number and the String "100" would not match the regex)
(      : Start of a group
.     : A point
[0-9]  : A single number between 0 and 9
)?     : End of the group. The group must be repeated zero or one time
$      : End of the String
  

Пожалуйста, обратите внимание, что d это не совсем эквивалентно [0-9] : d соответствует любой цифре в Юникоде. Например, этот символ будет сопоставлен, если вы используете d , но не будет, если вы используете [0-9] .

Комментарии:

1. @Otiel вы уверены, что нет необходимости экранировать . ?

2. @Otiel: вам нужно выполнить экранирование, иначе оно также будет соответствовать и т.д. !@#$%^amp;*()

3. @Y.Shoham: Да, вы правы, я перепутал правила скобок ( ) и скобок [ ] . Отредактировал ответ.

4. Очень приятно, спасибо. Я забыл включить требование, чтобы также «Не совпадало» с 0 или 012 (см. Редактирование выше). Я попытался изменить начало на ^[1-9], но тогда, конечно, оно не будет совпадать с 10 или 20 и т.д.

5. @EkoostikMartin: Смотрите пояснения в моей правке. И всегда пожалуйста 🙂

Ответ №4:

Попробуйте указать начало / конец строки:

 @"^d [.]?[0-9]?$"
  

Ваше регулярное выражение не будет работать, поскольку ie 1.234 соответствовал версии 1.2, если вы не укажете, что хотите, чтобы строка заканчивалась '$' знаком.