Was ist ein C # regulärer Ausdruck, die Währung, float oder integer validieren werden?

StackOverflow https://stackoverflow.com/questions/617826

  •  03-07-2019
  •  | 
  •  

Frage

Was ist ein regulärer Ausdruck für C # geeignet, die eine Reihe bestätigen werden, wenn sie die Spiele zu folgen?

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

oder die negativen Äquivalente?

War es hilfreich?

Lösung

Sie können csmba regex verwenden, wenn Sie eine leichte Modifikation zu machen.

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

Andere Tipps

Ich denke, ssg richtig ist. Es ist nicht wirklich eine gute Verwendung von Regex, vor allem, wenn Sie Ihre Software mit Nicht-US-zentrierte Dateneingabe zu tun hat.

Zum Beispiel, wenn das Währungssymbol ist der Euro oder die japanische Yen oder das britische Pfund eine der anderen Dutzende Währungssymbole gibt?

Was Zahlenformatierung Regeln?

In den USA würden Sie 1,000,000.00 geben, aber in Frankreich, diese 1.000.000,00 werden sollen. Andere Länder erlauben Abstand zwischen digit-Gruppierung ...

Wenn Sie einen gerade Regex verwenden, ohne die Kultur zu berücksichtigen, dann bist du nie erfolgreich gehen zu bestätigen, es sei denn Sie sind 100% sicher, dass Ihre Software wird nie in einem Nicht-US-zentrischen Kontext verwendet werden.

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

Ich glaube, ich habe ein Problem mit ssg Lösung gefunden (oder vielleicht ein MS Fehler!).

Ausführen dieser:

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

Gibt true zurück. „0,2“ Sicher ist kein gültiger Wert der Währung?

Seien Sie vorsichtig mit Schwimmern. Schließlich werden Sie einen Fall getroffen wie 0,01 als 0,00999999 vertreten. Strings oder ganze Zahlen sind besser zu nutzen.

Versuchen Sie dieses. Es kann einige Feinabstimmung müssen nur für eine einzige Dezimalstelle zu ermöglichen, aber es Ihre Testfälle entspricht. Ich hoffe, das hilft.

[$\d,.]+

Mit diesem regulären Ausdruck für die US-Währung \ $ (\ D) * \ d Spiele $ 300, 12900 $ Non-Match $ 12.900,00

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top