Pregunta

Estoy tratando de encontrar un fragmento de expresión regular que coincida con el valor de una moneda.

Me gustaría hacer coincidir solo números y 1 punto decimal, es decir,

Permitido

  • 10
  • 100
  • 100.00

No permitido

  • caracteres alfa
  • 100,00
  • +/- 100

He buscado e intentado algunos sin mucha suerte.

Espero que puedas aconsejarte

¿Fue útil?

Solución

if (preg_match('/^[0-9]+(?:\.[0-9]+)?$/', $subject))
{
    # Successful match
}
else
{
    # Match attempt failed
}

Nota al margen : si desea restringir la cantidad de lugares decimales que desea, puede hacer algo como esto:

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

Entonces

100.000

coincidirá, mientras que

100.0001

no lo hará.

Si necesitas más ayuda, publica un comentario.

PS Si puede, use el formateador de números publicado arriba. Las funciones nativas siempre son mejores (y más rápidas), de lo contrario, esta solución le servirá bien.

Otros consejos

¿Qué tal esto?

if (preg_match('/^\d+(\.\d{2})?$/', $subject))
{
   // correct currency format
} else {
  //invalid currency format
}

Es posible que desee considerar otras alternativas al uso de una expresión regular.

Por ejemplo, está NumberFormatter clase, que proporciona el número flexible y la moneda análisis y formateo , con soporte en internacionalización integrado.

Está integrado en PHP 5.3 y versiones posteriores, y está disponible como una extensión en versiones anteriores de PHP 5.

Prueba esta expresión regular:

^(?:[1-9]\d+|\d)(?:\.\d\d)?$
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top