Frage

ich eine Zeichenfolge haben, und ich möchte überprüfen, ob es nur aus Ziffern besteht. Ich will nicht wirklich (oder müssen) analysieren sie oder irgendetwas, ich möchte nur wissen, dass es nichts enthält, aber Ziffern (und keine Gleitkomma-Separator entweder nur Ziffern).

PHP hat diese nette Funktion namens ctype_digit . Gibt es etwas ähnliches für C # überall in .NET Framework? Oder muss ich einen regulären Ausdruck oder etwas ähnliches benutzen?

einen regulären Ausdruck für das Erstellen von natürlich wäre ziemlich einfach, aber ich mag es nicht benutzen, wenn es bessere Möglichkeiten: p

War es hilfreich?

Lösung 2

Die Antwort von @ bruno conde hat mich an diese: D

if(subject.All(char.IsDigit))
    // Do something

kann nicht glauben, ich hätte nicht gedacht, es vor ...

Andere Tipps

könnten Sie int.TryParse . Es gibt true zurück, wenn der angegebene String eine gültige Zahl darstellt, andernfalls false. Vergessen Sie nicht, zu verwenden NumerStyles.None zu verbieten Leerzeichen und die Plus / Minus-Zeichen.

UPDATE : Wie empi sagt, das wird nicht funktionieren für sehr große Strings. Wenn Sie beliebig große Strings haben, vielleicht ein regex ist Ihre einzige Option. Man könnte so etwas wie Regex.IsMatch(theString,"^[0-9]+$") tun

bool onlyDigits = "1234".All(c => char.IsDigit(c));

Methinks, wäre Sie besser zu nutzen regex die Arbeit für Sie zu tun ... „\ d +“ sollte es tun ... ok, Sie sagten, Sie wollen nicht, es zu benutzen ... aber es ist narrensicher Weg, um die Zeichenfolge zu gewährleisten, nur Zahlen enthält, dann, wenn der regexp passiert, dann können Sie verwenden int.Parse (...) sofort.

Ja, können Sie

bool Int32.TryParse(string s, out int result);

Codebeispiel:

string myString = "1265";
int myInt;

if (Int32.TryParse(myString,myInt) // Returns true if mystring contains only digits
{
...
}

Andere Option ist Regex zu verwenden:

    public static bool IsDigit(string myString)
    {
        string pattern = @"^\d*$";

        if (Regex.IsMatch(myString, pattern))
            return true;
        else
            return false;
    }

Sie können das Muster nach Ihren Anforderungen ändern.

Es gibt keine integrierte Methode. Int32.TryParse oder Int64.TryParse wird nicht funktionieren, für sehr lange Zeichenfolgen mit nur Zahlen (sie auch andere Zeichen erlauben verwendet ganze Zahlen darstellen).

Wie andere Leute schon gesagt haben, können Sie die int.TryParse Methode verwenden, obwohl es sei denn, Ihre Nummer wirklich wirklich EXTREM groß ist, können Sie die TryParse Methode anderer Typen verwenden könnte, die eine größere Reichweite als int32 des haben. (Natürlich die NumberStyles.None Option, um zu verhindern Zeichen und Interpunktion).

Hier ist der Bruch nach unten:

  1. int -2.147.483.648 .. 2147483647
  2. uint 0 .. 4294967295
  3. long -9.223.372.036.854.775.808 .. 9.223.372.036.854.775.807
  4. ulong 0 .. 18.446.744.073.709.551.615
  5. float -3.402823e38 .. 3.402823e38
  6. double -1.79769313486232e308 .. 1.79769313486232e308
  7. decimal -79228162514264337593543950335 .. 79228162514264337593543950335

Die eine, die die größten Zahlen analysieren kann, ist Double. Wenn Sie die Nummer verwenden müssen, werden Sie einige Präzision verlieren, aber es kann wirklich lange Zahlen analysieren (auch wenn Sie sagen, dass Sie nicht brauchen, es zu benutzen, so sollte es nicht ein Problem sein). In einem kurzen Test, den ich tat, schaffte es, die folgende Zeichenfolge erfolgreich zu analysieren:

79228162514264337593543950335792281625142643375935439503357922816251426433759354395033579228162514264337593543950335792281625142643375935439503357922816251426433759354395033579228162514264337593543950335792281625142643375935439503357922816251426433759354395033579228162514264337593543950335234234234234243423

(das ist 308 Zeichen, wäre es mit einer weiteren Zahl gescheitert)

Dennoch, wenn Sie nicht die Nummer nicht benutzen wollen, könnte es eine zu viel des Guten, so dass ich für die Regex gehen würde, oder noch besser die Schleife Überprüfung, dass jedes Zeichen eine Ziffer ist.

Wenn Sie dann wollen ein wenig verrückt gehen Sie, dass in mehrere kleinere Strings aufgeteilt könnte, und verwenden Sie die Task-Bibliothek in einer parallelen Art und Weise zu überprüfen: P

(Ich weiß, es ist ein wenig offtopic jetzt, aber wenn Sie das tun wollen, sollten Sie parallel.for und die Partition Ranger überprüfen, diesen C9 10min Clip Check-out: Parallel Für Partition Ranger )

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