HTML5 Форма ввода шаблона Формат валюты - PullRequest
33 голосов
/ 11 мая 2011

Используя HTML5, у меня есть поле ввода, которое должно проверяться по введенной сумме в долларах. В настоящее время у меня есть следующая разметка:

<input type="number" pattern="(\d{3})([\.])(\d{2})">

Это прекрасно работает для суммы, которая больше 100,00 и меньше 1000,00. Я пытаюсь написать шаблон (регулярное выражение), чтобы принимать разные суммы в долларах. Может быть, свыше 100 000,00. Возможно ли это?

Ответы [ 7 ]

42 голосов
/ 04 октября 2012

Лучшее, что мы можем придумать, это:

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

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

Соответствует этим:

1 => true
1.00 => true
$1 => true
$1000 => true
0.1 => true
1,000.00 => true
$1,000,000 => true
5678 => true

И отсеивает это:

1.001 => false
02.0 => false
22,42 => false
001 => false
192.168.1.2 => false
, => false
.55 => false
2000,000 => false
29 голосов
/ 21 ноября 2011

Если вы хотите разрешить разделитель запятой, который пройдет следующие тестовые случаи:

0,00  => true
0.00  => true
01,00 => true
01.00 => true
0.000 => false
0-01  => false

затем используйте это:

^\d+(\.|\,)\d{2}$
6 голосов
/ 11 мая 2011

Как насчет:

^\d+\.\d{2}$

Это соответствует одной или нескольким цифрам, точке и 2 цифрам после точки.

Для соответствия запятой в качестве разделителя тысяч:

^\d+(?:,\d{3})*\.\d{2}$
4 голосов
/ 08 ноября 2012

Другой ответ для этого будет

^((\d+)|(\d{1,3})(\,\d{3}|)*)(\.\d{2}|)$

Это будет соответствовать строке:

  • одному или нескольким числам без десятичного разряда (\ d +)
  • любое количество запятых, каждое из которых должно сопровождаться 3 цифрами и иметь до 3 цифр (\ d {1,3}) (\, \ d {3} |) *

Каждый или который может иметь десятичный знак, после которого должны следовать 2 цифры (. \ D {2} |)

2 голосов
/ 30 июня 2015

Я написал эту ценовую модель без нулевой цены.

(0\.((0[1-9]{1})|([1-9]{1}([0-9]{1})?)))|(([1-9]+[0-9]*)(\.([0-9]{1,2}))?)

Действительно для:

  • 1,00
  • 1
  • 1,5
  • 0,10
  • 0,1
  • 0,01
  • 2500,00

Недействительно для:

  • 0
  • 0,00
  • 2500.
  • 2500,0000

Проверьте мой код онлайн: http://regexr.com/3binj

1 голос
/ 21 апреля 2013

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

^[$\-\s]*[\d\,]*?([\.]\d{0,2})?\s*$

Заботится о:

$ 1.
-$ 1.00
$ -1.0
.1
.10
-$ 1,000,000.0

Конечно, это также будет соответствовать:

$$--$1,92,9,29.1 => anyway after cleanup => -192,929.10
0 голосов
/ 23 ноября 2014

Используйте этот шаблон "^\d*(\.\d{2}$)?"

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