PHP Currency Expression régulière
Question
J'essaie de trouver un élément de regex correspondant à une valeur monétaire.
Je voudrais ne faire correspondre que des nombres et 1 point décimal, c'est-à-dire
Autorisé
- 10
- 100
- 100.00
Non autorisé
- Caractères alpha
- 100,00
- +/- 100
J'ai cherché et essayé plusieurs d'entre eux sans aucune chance.
J'espère que vous pourrez conseiller
La solution
if (preg_match('/^[0-9]+(?:\.[0-9]+)?$/', $subject))
{
# Successful match
}
else
{
# Match attempt failed
}
Remarque secondaire : si vous souhaitez limiter le nombre de décimales souhaité, vous pouvez procéder de la manière suivante:
/^[0-9]+(?:\.[0-9]{1,3})?$/im
Alors
100.000
correspondra, alors que
100.0001
pas.
Si vous avez besoin d'aide supplémentaire, postez un commentaire.
PS Si vous le pouvez, utilisez le formateur de nombres posté ci-dessus. Les fonctions natives sont toujours meilleures (et plus rapides), sinon cette solution vous sera utile.
Autres conseils
Que diriez-vous de cela
if (preg_match('/^\d+(\.\d{2})?$/', $subject))
{
// correct currency format
} else {
//invalid currency format
}
Vous pouvez envisager d'autres solutions que l'utilisation d'une expression régulière.
Par exemple, il existe le NumberFormatter
. classe, qui fournit un nombre et une devise flexibles analyse et formatage , avec prise en charge intégrée de l'internationalisation.
Il est intégré à PHP 5.3 et versions ultérieures et est disponible en tant qu'extension dans les versions antérieures de PHP 5.
Essayez cette expression régulière:
^(?:[1-9]\d+|\d)(?:\.\d\d)?$