2009-02-06 13 views
9

Ich muss eine Eingabe in einem Formular validieren. Ich erwarte, dass die Eingabe eine Zahl zwischen 1 und 19 Ziffern ist. Die Eingabe kann auch mit Nullen beginnen. Ich möchte jedoch bestätigen, dass sie nicht nur aus Nullen bestehen. Ich habe eine Regex, die sicherstellen wird, dass die Eingabe numerisch ist und zwischen 1 und 19 Zahlen.Benötigen Sie eine Regex, um eine Zeichenfolge mit variabler Länge zu entsprechen, die nicht nur aus Nullen bestehen kann

^\d[1,19]$ 

Aber ich kann nicht herausfinden, wie man eine Überprüfung einbezieht, dass die gesamte Zeichenfolge nicht nur aus Nullen besteht. Ich habe versucht, diese

^(![0]{1,19})(\d[1,19])$ 

aber es funktioniert nicht auf 0000000000000000001, weil es eine variable Anzahl von Nullen ermöglicht.

Wie überprüfe ich, dass der gesamte String NICHT Nullen ist?

Danke.

Ich versuche, dies in einem ASP.NET RegularExpressionValidator zu tun, so dass ich auf einen einzelnen Ausdruck gehofft hatte. Ich habe andere Möglichkeiten, also bin ich kein Pech, wenn das nicht möglich ist.

Antwort

18

^(?!0+$)\d{1,19}$

+0

Ich habe dieses vorher versucht und es funktioniert nicht für das Beispiel, das ich gab. War mir nicht sicher was? tat aber. – Notorious2tall

+0

Zweite Versionen funktionieren für meine Testfälle. – chaos

+0

Schön, das funktioniert! Kannst du den (?! 0 + $) Teil erklären? – Notorious2tall

2

einfach eine negative Vorschau:

(?!^0+$)(^\d{1,19}) 

Dies funktioniert in Perl in Ordnung.

+0

Sie sollten das^ausschließen und es ganz am Anfang setzen; Ihr Weg wird funktionieren, aber auf diese Weise drückt sich die Absicht klarer aus. Und Sie müssen ein hinzufügen $ 0 bis zum Ende, so dass es nach den Ziffern nichts anderes mehr finden kann. –

0

Sie brauchen RegEx nicht für diese

  ulong test; 
     string number = "123456789"; 
     if (ulong.TryParse(number, out test) && (test < 9999999999999999999ul) && (test > 0)) 
      Console.WriteLine(test); 
+1

Ich bin mir sicher, dass er weiß, wie man Logik dafür als allgemeinen Fall macht. Was er versucht, ist es als RE zusammenzufassen, und wir können vermute, er hat Gründe dafür – chaos

+0

Ja, das ist richtig.Ich kann es auf der Serverseite validieren, wollte dies aber mit einem RegExValidator machen. Teilweise b/c möchte ich keinen Beitrag zurück machen und teilweise b/c möchte ich Regex lernen. Grundsätzlich praktische und egoistische Gründe. :) – Notorious2tall

+0

Ich bin nicht vertraut mit Ihrer Plattform, aber wenn die Designer Ihres RegExValidator wirklich schlau waren, haben sie es vielleicht so gemacht, dass Sie es sowohl auf Serverseite ausführen als auch als clientseitiges Skript rendern können sehr optimal (Sie benötigen es auch auf der Client-Seite, aber vertrauen Sie niemals einem Client). – chaos

2

(?! 0 + $) ist eine Look-Ahead-Richtlinie. Das ?! ist der negative Lookahead-Befehl, der nach einem oder mehreren Nullen am Ende der Zeichenfolge sucht. Wenn das übereinstimmt, werden die Zeichen verbraucht, und die reguläre Ziffernsuche von \ d {1,19} bleibt bestehen.

Boost Perl Regexp hat eine gute Diskussion von Perl Regexp wie von Boost erkannt.

Verwandte Themen