2016-07-14 5 views
1

Ich möchte eine ganze Zahl beschränken maximal 10 Ziffern von 0 auf eine beliebige Anzahl (XXXXXXXXXX)Wie Integer einschränken zu 10 Stellen können bis

I C# und .NET Web API bin mit

.ie zu ermöglichen

in meiner Klasse (CS-) Datei habe ich wie diese eine JSON-Antwort, die ich erhalten

[RegularExpression(@"^\d{1,10}$", ErrorMessage = "Invalid RequestedN")] 
[Display(Name = "RequestedN")] 
public int RequestedN { get; set; } 

verwendet button..I auf klicken meine vorlegen wird durch die Validierung Model in Controller, der JSON (Objekt) validieren. ..

Wenn I 11 Ziffern eingeben wird Nachricht

„JSON integer 91234567890 ist zu groß oder klein für ein Int32 wie unten zeigt. Pfad 'Quotas [0] .RequestedN', Zeile 1, Position 81.“

Aber ich will Nachricht als "Invalid RequestedN"

ich einen anderen RegulaererAusdruck versucht haben, wie unten aber keinen Gebrauch.

^([1-9]|([1-9][0-9])|([1-9][0-9][0-9])|([1-9][0-9][0-9][0-9])|([1-9][0-9][0-9][0-9][0-9])|\d{6}|\d{7}|\d{8}|\d{9}|\d{10})$ 

vorschlagen eine Idee oder Lösung für dieses Problem

+2

Vielleicht sollten Sie 'public long RequestedN {get; einstellen; } '. Siehe http://stackoverflow.com/questions/4839511/value-was-either-too-large-or-too-small-for-an-int32-facebook-dotnetopenauth –

+2

Möchten Sie diesen Wert wirklich speichern/verarbeiten? als ein 'int'? Da der Bereich von 'int' -2147483648 bis 2147483647 ist, ist es * bereits * nicht möglich, eine Ganzzahl mit mehr als 10 Ziffern (und einige mit 10 Ziffern) zu speichern. Vielleicht möchten Sie stattdessen eine 'Zeichenfolge'? (D.h., werden Sie tatsächlich irgendwelche Berechnungen für diese Zahl durchführen, oder ist es tatsächlich, logisch, eine Reihe von Ziffern?) –

+0

ok, gut. Jetzt möchte ich Int 32 begrenzen, um von 0 bis 2147483647 zu akzeptieren.Dann, was wird der mögliche reguläre Ausdruck sein, der alle Werte von 0 bis 2147483647 –

Antwort

2

Da der Wert, den Sie ist größer als der eingegebene Wert ein Int32 halten kann.

S ee link: Int32

Der Wert dieser Konstante ist 2,147,483,647; hexadezimal 0x7FFFFFFF.

Wenn Sie zehn Ziffern unterstützen möchten, beachten Sie bitte einen anderen Datentyp.

Vielleicht Int64 das ist der long Datentyp.

+2

Genau, es ist nicht die Regex, die falsch ist. – ClasG

+0

ok, gut. Jetzt möchte ich Int 32 begrenzen, um von 0 bis 2147483647 zu akzeptieren. Was ist dann der mögliche reguläre Ausdruck, der alle Werte von 0 bis 2147483647 –

+0

entspricht Das ist wirklich eine neue Frage. Es ist jedoch ganz einfach, mit '^ 1? \ D {0,9} $' auf 1999999999 zu beschränken. Die Übereinstimmung von maximal 2147483647 ist wesentlich komplexer. Es ist sicherlich möglich und es gibt Online-Regex-Generatoren für die Aufgabe. – ClasG

3

Sie haben Int64 zu verwenden:

Int64 ist ein unveränderliches Werttyp, unterzeichnete ganze Zahlen mit Werten darstellt, die von den negativen Bereich 9,223,372,036,854,775,808 (die von der Int64 :: MinValue Konstante dargestellt wird), durch positive 9,223,372,036,854,775,807 (die durch die Int64 :: MaxValue konstante dargestellt. Das .NET Framework auch eine nicht signierte 64-Bit-integer-Wert Art umfasst, UInt64, die Werte, die von 0 bis 18.446.744.073.709.551.615 Bereich darstellt.

So wandeln Sie Ihre Nummer Int64 und dann kannst du y benutzen unser Ausdruck:^\ d {1,10} $

+0

ok, gut. Jetzt möchte ich int 32 begrenzen, um von 0 bis 2147483647 zu akzeptieren. Dann was ist der mögliche reguläre Ausdruck, der alle Werte von 0 bis 2147483647 entspricht –

Verwandte Themen