Регулярное выражение для десятичного или пустого - PullRequest
5 голосов
/ 24 марта 2010

Извините за потенциально глупый вопрос, но я пытаюсь собрать регулярное выражение, которое позволит:

Число с 1 или 2 цифрами перед десятичной точкой и 0-6 цифрами после десятичной точки. Тем не менее, я также должен оставить поле пустым, если это необходимо.

Допустимые примеры

0.952321
1.20394
12.12
25
Blank

Неверные примеры

123.45678
1.1234567

Пожалуйста, кто-нибудь может помочь?

Ответы [ 7 ]

12 голосов
/ 24 марта 2010
^(?:\d{1,2}(?:\.\d{0,6})?)?$

Должен сделать свое дело.

\d     matches any digit
{n,m} specifies the number of occurrences
(?: ) creates an anonymous group
^     specifies the start of the string
$               the end of the string
?     means the group is optional
2 голосов
/ 24 марта 2010

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

^([0-9]{1,2}\.[0-9]{0,6})?$

Если десятичная часть необязательна, вы можете использовать

^([0-9]{1,2}(\.[0-9]{1,6})?)?$
2 голосов
/ 24 марта 2010

^(?:|\d{1,2}(?:\.\d{0,6})?)$

Часть перед трубой совпадает с пустой. Часть после соответствует одной или двум цифрам, за которыми следует точка и до шести цифр. ?:, поэтому мы не используем группы захвата без необходимости.

Надеюсь, это поможет!

0 голосов
/ 29 июля 2013

Я бы использовал один из них:

Чтобы соответствовать всем вашим десятичным знакам:

(\d+\.\d+){0,1}

Чтобы быть более точным в числе до / после точки, попробуйте / измените любой из них:

(\d+\.\d{2}){0,1}
(\d{4}\.\d{2}){0,1}
0 голосов
/ 08 июня 2012

В общем, то есть неограниченное количество знаков после запятой:

^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$

0 голосов
/ 24 марта 2010

Читая между строк, я расширил определение допустимого ввода и не стал и предположил, что вы хотите захватить только число в описанном формате.

Например, эти числа будут записываться как число справа и являются допустимыми для ввода:

"0.952321    "  0.952321             (trailing spaces stripped)       
"   1.20394 "   1.20394              (leading and trailing spaces stripped)
"12.12"            12.12             (no leading or trailing spaces)
"12.123   "      12.123
" .1234 "         .1234              (no leading digit -- start with decimal)
"25"                 25              (no decimal) 
" "                " " ?             (space. space captured or not)
"12."               12.              (1 or 2 digits, decimal, no numbers after decimal)

Не в порядке:

"."                                   just a decimal
"123456789"                           more than 2 digits lefthand
123                                       ""      "" 
123.45678 
1.1234567                             more than 6 digits right hand
[a-zA_Z]                              not a digit...

Итак, учитывая, что это регулярное выражение сделает это:

/^\s*(                  # beginning of string and strip leading space                                
 | \d{1,2}\.?           # 1 or 2 digits with optional decimal
 | \d{0,2}\.\d{1,6}     # 0,1, 2 digits with a decimal with digits 
 | \s+                  # remove if you do not want to capture space
  )\s*$                 # trailing blanks to the end
/x
0 голосов
/ 24 марта 2010
^(\d{1,2}(\.\d{1,6})?)?$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...