webentwicklung-frage-antwort-db.com.de

wie stelle ich eine Zahl dar, die kleiner oder gleich 100 ist?

Ich möchte mit einer Zahl übereinstimmen, die kleiner oder gleich 100 ist, es kann alles zwischen 0 und 100 sein, aber der Regex sollte nicht mit einer Zahl übereinstimmen, die größer als 100 ist, z. B. 120, 130, 150, 999 usw.

20
chanti

Versuche dies

\b(0*(?:[1-9][0-9]?|100))\b

Erklärung

"
\b                # Assert position at a Word boundary
(                 # Match the regular expression below and capture its match into backreference number 1
   0              # Match the character “0” literally
      *           # Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
   (?:            # Match the regular expression below
                  # Match either the regular expression below (attempting the next alternative only if this one fails)
         [1-9]    # Match a single character in the range between “1” and “9”
         [0-9]    # Match a single character in the range between “0” and “9”
            ?     # Between zero and one times, as many times as possible, giving back as needed (greedy)
      |           # Or match regular expression number 2 below (the entire group fails if this one fails to match)
         100      # Match the characters “100” literally
   )
)
\b                # Assert position at a Word boundary
"

Besuchen Sie (Link entfernt) für zukünftige Probleme.

40
Cylian

Wie wäre es damit für die Regex:

^([0-9]|[1-9][0-9]|100)$

dies würde 7, 82, 100 für Beispiele validieren, aber not 07 oder 082 nicht validieren.

Check out für weitere Informationen (und Variationen einschließlich Null-Präfix) zur Nummernkreisprüfung


Wenn Sie auf Fließkommazahlen achten müssen, sollten Sie lesen , hier ist ein Ausdruck, den Sie verwenden können:

Fließpunkt: ^[-+]?([0-9]|[1-9][0-9]|100)*\.?[0-9]+$

6
musefan

Verwenden Sie Code Assertions, wenn Sie einen Regex benötigen (eventuell):

 /^(.+)$(??{$^N>=0 && $^N<=100 ? '':'^'})/

Prüfung: 

my @nums = (-1, 0, 10, 22, 1e10, 1e-10, 99, 101, 1.001e2);

print join ',', grep 
                /^(.+)$(??{$^N>=0 && $^N<=100 ? '':'^'})/,
                @nums

Ergebnis:

 0,10,22,1e-010,99

(==> Hier ist etw., Um etwas über Code-Assertions zu erfahren ).

4
rubber boots

Mein praktischer Rat.  

Persönlich würde ich es ablehnen, einen derart komplexen Regex vollständig zu schreiben. Was ist, wenn sich Ihre Nummer in naher Zukunft von 100 auf 200 ändert. Ihr Regex muss sich erheblich ändern und es ist möglicherweise noch schwieriger zu schreiben. Alle oben genannten Lösungen sind NICHT selbsterklärend und müssen im Code durch einen Kommentar ergänzt werden. Das ist ein Geruch. 

Lesbarkeit ist wichtig. Code ist für Menschen und nicht für Maschinen.

Warum schreibst du nicht etwas Code und halte Regex einfach verständlich. 

2
Mayank Jaiswal

dies entspricht 0 bis 100

^0*([0-9]|[1-8][0-9]|9[0-9]|100)$
1
Ahmad Alaa

Dieses RegEx stimmt mit den Zahlen 0-100 Diapason überein und verbietet Zahlen wie 001:

\b(0|[1-9][0-9]?|100)\b
0

regex dafür

Perl -le 'for (qw/0 1 19 32.4 100 77 138 342.1/) { print "$_ is ", /^(?:100|\d\d?)$/ ? "valid input" : "invalid input"}'
0