Formato de moneda de patrón de entrada de formulario HTML5

Usando HTML5 tengo un campo de entrada que debe validar contra un monto en dólares ingresado. Actualmente tengo el siguiente marcado:

 

Esto funciona muy bien por una cantidad que es mayor que 100.00 y menor que 1,000.00. Estoy tratando de escribir el patrón (regex) para aceptar diferentes cantidades de dólares. Tal vez más de 100,000.00. es posible?

Si desea permitir un delimitador de coma que pase los siguientes casos de prueba:

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

luego usa esto:

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

Lo mejor que se nos ocurre es esto:

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

Me doy cuenta de que puede parecer demasiado, pero en lo que puedo probar, coincide con cualquier cosa que un ojo humano acepte como valor monetario válido y elimina todo lo demás.

Concuerda con estos:

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

Y elimina estos:

 1.001 => false 02.0 => false 22,42 => false 001 => false 192.168.1.2 => false , => false .55 => false 2000,000 => false 

Qué tal si :

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

Esto coincide con uno o más dígitos, un punto y 2 dígitos después del punto.

Para hacer coincidir también la coma como delimitador de miles:

 ^\d+(?:,\d{3})*\.\d{2}$ 

Otra respuesta para esto sería

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

Esto coincidirá con una cadena de:

  • uno o más números sin el lugar decimal (\ d +)
  • cualquier cantidad de comas, cada una de las cuales debe ir seguida de 3 números y tener hasta 3 números antes de ella (\ d {1,3}) (\, \ d {3} |) *

Cada uno o puede tener un lugar decimal que debe ir seguido de 2 números (. \ D {2} |)

Estoy escribiendo este patrón de precio sin precio cero.

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

Valido para:

  • 1.00
  • 1
  • 1.5
  • 0.10
  • 0.1
  • 0.01
  • 2500.00

Inválido para:

  • 0
  • 0.00
  • 0.0
  • 2500.
  • 2500.0000

Verifique mi código en línea: http://regexr.com/3binj

Me gusta darles a los usuarios un poco de flexibilidad y confianza, que obtendrán el formato correcto, pero quiero aplicar solo dígitos y dos decimales para la moneda.

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

Cuidar algo:

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

Por supuesto, también coincidirá:

 $$--$1,92,9,29.1 => anyway after cleanup => -192,929.10 

Use este patrón "^\d*(\.\d{2}$)?"