#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, если вы не укажете, что хотите, чтобы строка заканчивалась '$'
знаком.