Тестирование для числового ввода с регулярным выражением - PullRequest
4 голосов
/ 04 марта 2010

У меня есть следующее регулярное выражение:

^[-+]?[\d{0,3},?\d{3}]*\.?\d+$

Я пытаюсь поддерживать номера следующих форматов:

  • 1
  • -1
  • -1,00
  • 100000

Меня не интересует научная запись, но мои пользователи могут или не могут вводить запятые. У меня проблема в том, что выражение совпадает:

  • 100
  • * 1023 100,00 *

Как сделать так, чтобы выражение указывало, что если есть запятая, то после нее должно быть три символа.

Ответы [ 5 ]

6 голосов
/ 04 марта 2010

Попробуйте это регулярное выражение:

/^[-+]?(?:\d*|\d{1,3}(?:,\d{3})*)(?:\.\d+)?$/
1 голос
/ 04 марта 2010

Как указал Роберт Харви, если все, что вас беспокоит, это захват числовых значений для использования в вашей программе, вы можете просто убрать запятые, и все будет хорошо.

Однако, если предположить, что это вопрос форматирования (то есть вы проверяете нажатия клавиш и разрешаете только допустимый ввод или переформатируете ввод в допустимое числовое значение), вы можете попробовать что-то вроде этого:

РЕДАКТИРОВАТЬ : ^[+-]?\d{1,3}(,\d{3})*(\.\d+)?$

Для этого допускается любое количество наборов запятой и 3 цифр, за которыми следует ноль или один набор точек, за которыми следуют одна или несколько цифр.

1 голос
/ 04 марта 2010

Попробуйте это

^([-+]?\d(?:(,\d{3})|(\d*))+\d*)?\.?\d*$ 

УСПЕХИ

0
1
-1
-1.00
100,000
100.0
1,111,111
.25

НЕУДАЧИ

100.0.
100.0,
asdf100.0
100,
1,11,111
,111,111
0 голосов
/ 04 марта 2010

Почему бы просто не ударить все запятые, а затем проверить?

g=oldstring.replace(',','');
g=g.replace('.','');//may as well do dots too
if (! g.match('/^[0-9]*[0-9]$/'))
    alert("Bummerific");

Кроме того, если вы собираетесь разрешить запятые, вам не следует заставлять их ставить запятые каждые 3 цифры. Международные пользователи используют запятые для разделения десятичного знака. В этом случае, если вы хотите быть педантичным, то это регулярное выражение, вероятно, будет работать

/^[0-9][0-9,.]*[0-9]$/

Удачи!

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

Вы поместили свои квалификаторы "count" в квадратные скобки, что не имеет смысла (ну, это имеет смысл, синтаксически, но это не то, что вы думаете, что делает).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...