Expresión regular de la moneda PHP
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
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)?$