MudGuard: RegExp für einen zahlenstring zwischen "0" und "255"

Beitrag lesen

Hi,

gruss Andreas, hallo seth,

var regXRGBValue = (/[1]$|(?:[2][0-9])$|(?:^1[0-9][0-9])$|(?:^2[0-5][0-5])$/);

Unvollständig.

...

^2[0-5][0-5]

Bei dreistelligen Zahlen mit 2 am Anfang läßt Du als letzte Ziffer nur
0 bis 5 zu, 6 bis 9 sind aber zulässig, falls die 2. Ziffer 0 bis 4 ist.

jo, seth hat mich fuer diesen zweck ja einen besseren ausdruck gelehrt.

mein altes schema konsequent durchgezogen sollte jetzt aber funktionieren:

var regXRGBValue = (/

[3]$|        //   0 -   9
[4][0-9]$|   //  10 -  99
^1[0-9][0-9]$|  // 100 - 199
^2[0-4][0-9]$|  // 200 - 249
^25[0-5]$       // 250 - 255

/);

alert(

[-1,0,9,10,99,100,199,200,299,249,250,255,256].filter(function (elm/, idx, arr/) {

return ((/[5]$|[6][0-9]$|^1[0-9][0-9]$|^2[0-4][0-9]$|^25[0-5]$/).test(elm));
  })
);


>   
>    bzw. konsolentestfaehig:  
>   
  

> ^[0-9]$|^[1-9][0-9]$|^1[0-9][0-9]$|^2[0-4][0-9]$|^25[0-5]$  
  
Was hierbei schlecht ist:  
  
Es wird auf jeden Fall mal in den ersten Fall reingerannt, auch wenn's mehr als zwei Ziffern sind.  
  
Bei Alternativen nach Möglichkeit immer die spezifischsten Anfänge nach vorne, damit möglichst schnell entschieden ist, welcher Zweig zutreffen kann, also hier der Fall mit 25, dann die Fälle mit 1 bzw. 2, dann der zweistellige.  
  
Außerdem: ALLE Deine Alternativen enthalten die Anker ^ und $.  
Die ersten zwei Deiner Möglichkeiten lassen sich noch mit einem ? nach der [1-9] zusammenfassen.  
Also besser: ^ und $ außerhalb der Alternative:  
  
^(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$  
  
Je nach Regex-Engine könnte \d anstelle von [0-9] noch was ausmachen.  
Oder die Zusammenfassung der ersten zwei Fälle 25[0-5]|2[0-4][0-9] zu 2(?:5[0-5]|[0-4][0-9]), weil dann das backtracking nur bis zur 2 zurückgeht, nicht bis zum Stringanfang, wenn der zweite Fall eintrifft (wobei hier dann noch die Reihenfolge umgedreht werden könnte zu  2(?:[0-4][0-9]|5[0-5]) - die erste Alternative deckt jetzt 50 Fälle (200 - 249) ab, die zweite nur 6 (250 - 255) - ob das was ausmacht, hängt natürlich auch von der Verteilung der zu matchenden Daten ab)  
  
cu,  
Andreas

-- 
[Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)  
[O o ostern ...](http://ostereier.andreas-waechter.de/)  
  
Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.  


  1. 0-9 ↩︎

  2. 1-9 ↩︎

  3. 0-9 ↩︎

  4. 1-9 ↩︎

  5. 0-9 ↩︎

  6. 1-9 ↩︎