2015-05-26 4 views
6

Mit regex, kann ich überprüfen, ob es dezimal ist oder nichtprüfen dezimal und Gesamtlänge der Anzahl

^\d*\.?\d*$ 

Aber was ich will, ist, kontrollieren Gesamtlänge jener Ziffer.

(^\d*\.?\d*$){1,10} 

Aber ich kann es immer noch nicht kontrollieren.

Nach 2 Tage später ist meine letzte solution

(?=^\d*\.?\d*$)^.{1,10}$ 

Regular expression visualization

Debuggex Demo

+1

Entfernen Sie die '*' nach '\ d'. – Maroun

+0

Welche Engine/Sprache verwenden Sie? Dies wird in einem einfachen Regex mit einigen Engines nicht einfach sein. –

+0

Ich benutze C# @ DenysSéguret –

Antwort

5

Hier ist eine Lösung:

^(?!.{10})\d*\.?\d*$ 

Dies prüft die ganze Zahl nicht mehr als 10 Zeichen.

Wenn Sie die ganze Nummer überprüfen wollen, ist nicht mehr als 10 Ziffern (nicht den Punkt gezählt wird), können Sie

verwenden
^((?!.{11})\d*\.\d*|(?!.{10})\d*)$ 
+0

Seguret, +1 Stimme für Ihren großen Vorschlag, Es hilft mir sehr. Aber ich habe noch Frage, Wenn ich 10 Ziffern begrenzen möchte, muss ich machen^^ (?!. {11}) \ d * \. ? \ d * $ ', wenn ich eine 11-stellige Begrenzung haben möchte, muss ich' .. {12} .. 'machen. Gibt es einen anderen Weg? Vielen Dank –

+0

@FrankMyatThu Beantwortet meine Bearbeitung Ihre Bedenken? –

2
(^\d*\.?\d*$){1,10} 
    ↑  ↑ 

Die * Mittel, null oder mehr. Ihre Regex bedeutet also "null oder mehrere Male, von 1 bis 10 mal", so dass {1,10} in diesem Fall überflüssig ist. Sie müssen * entfernen oder {1,10} nur auf Teile anwenden, die es nicht haben.

Zum Beispiel können Sie Ihre regex ändern:

^\d*(\.?\d{0,10})$ 

Diese Zahlen entsprechen, die nach dem Punkt auf 10 Stellen haben auf. Wenn Sie eine Float-Zahl übereinstimmen sollen, die 10 Stellen insgesamt, können Sie negative Vorschau verwenden (wie @ DenysSéguret bereits in seiner Antwort erwähnt +1):

(?!.{10})\d*\.?\d* 

Sie paßt \d*\.?\d*$ nur, wenn er seine Länge < 10 (einschließlich des Punktes).

+1

Dies akzeptiert mehr als 10 Länge. – Manwal

+0

@Manwal bearbeitet. – Maroun