2011-04-06 18 views
5

Uso C# y ASP.NET 4 WebControls.¿Cuál es su enfoque favorito para verificar si un COLOR HTML es válido?

Tengo un cuadro de texto en mi página, el usuario puede ingresar un color HTML en formato HEXADECIMAL (ff0000) o en formato HTML ("Rojo").

Mi idea inicial fue que sería muy difícil escribir un RegEx capaz de validar la entrada de este usuario, así que se me ocurre una idea para escribir un método simple para verificar si el color ingresado puede traducirse a uno válido. utilizó el contexto de System.Drawing.

Debajo de mi código. Devuelve un Bool DataType que indica si la operación fue exitosa. Está funcionando bien por ahora pero me gustaría saber:

  • Si mi método fue bien escrito?
  • ¿Conoces un mejor enfoque?

Gracias por su atención.

using SD = System.Drawing; 

protected static bool CheckValidFormatHtmlColor(string inputColor) 
     { 
      try 
      { 
       SD.Color myColor = SD.ColorTranslator.FromHtml(inputColor); 
       return true; 
      } 
      catch (Exception ex) 
      { 
       return false; 
      } 
     } 
+1

Su código es el más pragmático creo – Tobias

Respuesta

7

Mi instinto dice que desconfío de Microsoft cuando se trata de obtener algo así como un código de color HTML correcto. He encontrado lo que parece ser the source code to the class que está usando y acepta muchas cosas que no son colores HTML.

Una expresión regular que luego se compara con una lista parece el camino sensato para esto.

Después de recortar el espacio en blanco, verifique si coincide con /^#[a-fA-F0-9]{6}$/, si no lo hace, compárelo con el list of 16 colours que aparece en HTML.

+0

Gracias David por su regx --- pero ¿Qué opinas acerca de método? – GibboK

+0

He agregado un párrafo en la parte superior después de haber investigado un poco la clase que está utilizando. – Quentin

+0

Gracias David probaré y lo haré saber con certeza. Gracias por ahora. – GibboK

6

El manejo de excepciones es pesado y debe utilizarse como último recurso y solo para las excepciones reales. Prueba esto. Comprueba si hay un color hexadecimal html válido y luego prueba los colores con nombre.

protected static bool CheckValidFormatHtmlColor(string inputColor) 
{ 
     //regex from http://stackoverflow.com/a/1636354/2343 
     if (Regex.Match(inputColor, "^#(?:[0-9a-fA-F]{3}){1,2}$").Success) 
      return true; 

     var result = System.Drawing.Color.FromName(inputColor); 
     return result.IsKnownColor; 
} 
3

Un regex para todos, solo por diversión. El i al final es para insensibilidad de mayúsculas y minúsculas. Probablemente no sea rápido, sino "un disparo".

colores HTML

/^(#[a-f0-9]{6}|black|green|silver|gray|olive|white|yellow|maroon|navy|red|blue|purple|teal|fuchsia|aqua)$/i 

colores CSS

/^(#[a-f0-9]{6}|#[a-f0-9]{3}|(rgb|hsl) *\(*[0-9]{1,3}%? *, *[0-9]{1,3}%? *, *[0-9]{1,3}%? *\)|(rgba|hsla) *\(*[0-9]{1,3}%? *, *[0-9]{1,3}%? *, *[0-9]{1,3}%? *, *[0-9]{1,3}%? *\)|black|green|silver|gray|olive|white|yellow|maroon|navy|red|blue|purple|teal|fuchsia|aqua)$/i 
+0

te perdiste los esquemas de color hsl y hsla –

+0

@SuryaPratap ¡correcto! Creo que solo duplicar las piezas de rgb & rgba podría hacer el truco. O también agregar interruptores internos (rgb | hsl) y (rgba | hsla). – FrancescoMM

1
using System.Text.RegularExpressions; 

var regexColorCode = new Regex("^#[a-fA-F0-9]{6}$"); 
string colorCode = "#FFFF00"; 

if (!regexColorCode.IsMatch(colorCode.Trim())) 
{ 
    ScriptManager.RegisterStartupScript(this, GetType(), "showalert" ,"alert('Enter a valid Color Code');", true); 
} 
else 
{ 
    //do your thing 
} 
Cuestiones relacionadas