Мне нужно проверить, является ли число допустимым с использованием десятичного разделителя и необязательного разделителя тысяч.Мне нужно регулярное выражение, потому что текущий код, который не сделан мной, использует регулярное выражение, которое не работает должным образом, и я собираюсь это исправить.
Так что следующие комбинации будут допустимы (Использование .
в качестве десятичного разделителя и ,
в качестве разделителя тысяч)
- 10000
- 100 000 000
- 100 000 000,345345
- 10000.689
Но следующее не будет законным:
В основном я хочу числа с правильным использованием десятичного разделителя и разделителя тысяч или без них вообще,но не недействительные комбинации.Я много осматривался, пока нашел этот пост .У которого есть отличное регулярное выражение, которое идеально подходит, когда числа имеют десятичный разделитель и разделитель тысяч, но когда я пытаюсь добавить другие параметры (числа только с десятичным разделителем или целые числа), я разбиваю выражение.
Iрешил, что, возможно, я мог бы захватить группы, соответствующие правилам, с помощью или, так что число соответствует одному выражению или другому, как это:
^([+-]?[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?)|(((\d)*)+?(\.\d))|(\d*)$
Первая группа - это выражение из другого поста, вторая, я думаю, охватываетчисла с десятичным разделителем и последним являются целыми числами, но он не работает.
Например, эти числа не совпадают:
Я думаю, проблема в том, что это происходит, потому что это всегда тест для первой группы, но я не уверен, как правильно использовать группы, чтобы они соответствовали любой из них.Кроме того, я думаю, что размещаю знаки - + не в том месте.
Я много искал и не смог найти ни одного выражения, которое работало правильно.Из предложенных:
Из регулярного выражения для числа с десятичными знаками и разделителем тысяч post
((\d){1,3})+([,][\d]{3})*([.](\d)*)?
-> Он ошибочно захватывает 10000000 и 10 000 000. ^(?!0+\.00)(?=.{1,9}(\.|$))\d{1,3}(,\d{3})*(\.\d+)?$
-> для 10000000 /^(?!0+\.00)(?=.{1,9}(\.|$))(?!0(?!\.))\d{1,3}(,\d{3})*(\.\d+)?$/
-> он не работает для 10000000 ((\d){1,3})+([,][\d]{3})*([.](\d)*)?
-> для -100.03
Это Могу ли я использовать ИЛИ в регулярном выражении без захвата содержимого? сообщение не является дубликатом, оно объясняет что-то, что может помочь мне решить проблему, но это не дубликат, особенно потому, чтоУ меня есть проблемы также со знаком + -.Кроме того, мои вопросы касаются проблемы, которая не является особенной для меня, это проблема, с которой сталкиваются многие люди, но из обнаруженных мною реализаций ни одна не работает.
С RegEx сопоставление числовых значений с илибез разделителей тысяч post
^-?([0-9]{1,3}\.?)+$
-> Сбой для -1000, но не для и не для 100.00.3 ^-?(?!0)(?:\d+|\d{1,3}(?:\.\d{3})+)$
-> Сбой для -100,03