Tach!
Mit ein wenig parseInt-Voodo
Warum Voodoo, wenn man die vorhandene Funktionalität nutzen kann?
var s = document.getElementById( "numbers" ).value.toUpperCase().replace( '#', '' ); var re1 = /[0-9A-F]{6}/ if ( re1.test( s ) ) { var red = parseInt( '0x' + s[0] ) * 16 + parseInt( '0x' + s[1] );
Die Umwandlung in Großschreibung ist nicht nötig, und die Stringakrobatik auch nicht. Für den Regexp-Test gibt es eine bessere Variante, die sich aus der einfacheren Verwendung von parseInt() ergibt. parseInt() kennt nämlich einen zweiten Parameter, der die Zahlenbasis angibt. Es reicht dann ein parseInt('a', 16). Wenn das Zeichen kein gültiges Hex-Zahlzeichen ist, kommt NaN raus. Daran kann man die Gültigkeit der Eingabe feststellen.
So lässt sich der Rotanteil ermitteln:
var red = parseInt(s.substr(0, 2), 16);
Der Rest kann ähnlich kurz notiert werden. Tests können à la isNaN(red)
erfolgen.
dedlfix.