Question

Qu'est-ce qu'une expression régulière appropriée pour C # qui validera un nombre s'il correspond au suivant?

 $1,000,000.150
 $10000000.199
 $10000 
 1,000,000.150
 100000.123
 10000

Ou les équivalents négatifs?

Était-ce utile?

La solution

Vous pouvez utiliser la regex de csmba si vous le modifiez légèrement.

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

Autres conseils

Je pense que ssg a raison. Ce n’est pas une très bonne utilisation de Regex, surtout si votre logiciel doit gérer une saisie de données non centrée sur les États-Unis.

Par exemple, si le symbole monétaire est l’euro, le yen japonais ou la livre sterling, l’un des douze autres symboles monétaires?

Qu'en est-il des règles de formatage des nombres?

Aux États-Unis, vous devez saisir 1 000 000,00 , mais en France, il devrait s'agir de 1 000 000,00 . D'autres pays autorisent l'espacement entre les groupes de chiffres ...

Si vous utilisez une regex simple sans prendre en compte la culture, vous ne réussirez jamais à valider si vous n'êtes pas sûr à 100% que votre logiciel ne sera jamais utilisé dans un contexte autre que celui des États-Unis.

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

Je pense avoir trouvé un problème avec la solution de ssg (ou peut-être un bogue MS!).

En cours d'exécution:

float.TryParse("0,2",NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"), out num)

Renvoie true. Sûrement " 0,2 " n'est pas une valeur de devise valide?

Soyez prudent avec les flotteurs. Finalement, vous frapperez un cas tel que 0.01 représenté par 0.00999999. Il vaut mieux utiliser des chaînes ou des entiers.

Essayez celui-ci. Il faudra peut-être quelques ajustements pour ne permettre qu'un seul point décimal, mais cela correspond à vos scénarios de test. J'espère que cela aide.

[$\d,.]+

Utilisez cette expression régulière pour la devise américaine \ $ (\ d) * \ d Allumettes 300 $, 12900 $ Non-correspondance 12900,00 $

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top