2015-11-18 3 views
1

У меня есть регулярное выражение, которое должно проверить, если строка десятичного числа ...Regext помощи для десятичных чисел

^([\+\-])?\d{1,10}[\.,]?\d{1,10}?$ 
  1. начать с одного + или - // не обязательно
  2. следуют с цифрой
  3. следует за десятичным одиночным сепаратором // не является обязательным
  4. и следуйте по одной-десяти цифрам // не обязательно - это должно быть следовать только в случае десятичного разделителя

, но не работает в случае

-1 //single digit 

и если есть больше, чем 10 digits w/o decimal separator -> should fail

assertEquals(false, Util.isDecimalNumber("12345678901")); 

Есть ли более простой способ проверить, является ли строка десятичным числом?

+1

Вы ограничены регулярное выражение? Почти каждый язык программирования предоставляет функцию, которая делает это для вас. – flowit

+0

Проблема в конце вашего RegExp. Вам нужно использовать '{0' quantifier вместо'? ': **'^([\ + \ -])? \ D {1,10} [\.,]?\ d {0,10} $ '** –

+0

Действительно ли номер' 123456.789123456'? – hjpotter92

ответ

0

Попробуйте следующую картину:

^[-+]?\d{1,10}(?:[.,]\d{1,10})?$ 
+0

decimal, В некоторых странах кома является десятичным разделителем и в другой точке. Нет тысяч разделителей;) –

+0

@ J.Doe Итак, если вход имеет десятичный разделитель; он может превышать 10-значный предел? – hjpotter92

+0

^[- +]? \ D {1,10} (?: [\.,] [1-9] \ d {0,9})? $ thx для подсказки - это кажется ОК. –

1

У вас есть неправильный синтаксис в дробной части вашего RegExp.

Вместо

^([\+\-])?\d{1,10}[\.,]?\d{1,10}?$ 

Она должна быть либо

^([\+\-])?\d{1,10}([\.,]\d{1,10})?$ 

или

^([\+\-])?\d{1,10}[\.,]?\d{0,10}$ 

Первый из них является более подходящим, так как он не позволяет десятичную точку без дробной части, как 123..

На словах она станет:

  1. начать с одной + или - // не обязательно.

  2. следуют с цифрой

  3. следовать с десятичной одним сепаратором и следуют с одной до десяти цифр // не обязательно

Проверить this Regex101 demo вне.

+0

https://regex101.com/ –

+0

@ J.Doe https://regex101.com/r/tD3kP8/1 :) –

Смежные вопросы