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

Était-ce utile?

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)?$
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top