Regex для проверки чисел до и после десятичной запятой без запятой - PullRequest
1 голос
/ 29 марта 2019

Я пытаюсь проверить десятичное число из 13 цифр до и 4 цифр после точки, исключая запятую, т. Е. Запятая не должна учитываться как цифра.

Действительные случаи

1,234,567,890,123.1234

1234567890123.1234

123456789012.1234

1234567890123.123

12345.123

1.2

0

В действительных случаях

12345abc.23 // string or special characters  not allowed

1,234,567,890,1231.1234

1,234,567,890,123.12341

12345678901231.1234

1234567890123.12341

Текущее регулярное выражение

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

Текущий Regex считает запятую как цифру.

Любая помощь будет отличной.

Ответы [ 2 ]

1 голос
/ 29 марта 2019

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

^(?!(?:[^.\s\d]*\d){14})-?\d+(?:,\d{1,3})*(?:\.\d{1,4})?$

Объяснение

  • ^ Начало строки
  • -? Необязательный дефис
  • (?! Отрицательный взгляд, утверждаю, что ниже не
    • (?:[^.\s\d]*\d){14} Совпадение не цифра, символ пробела или точка 14 раз
  • ) Закрыть взгляд
  • \d+ Совпадение 1+ цифр
  • (?:,\d{1,3})* Подберите запятую, 1-3 цифры и повторите 0+ раз (Или используйте \d+)
  • (?:\.\d{1,3})? Необязательная часть, соответствует точке и 1-4 цифрам
  • $ Конец строки

Regex demo

0 голосов
/ 29 марта 2019

Вы можете просто указать необязательный счет, например,

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