您最喜欢的方法是检查HTML COLOR是否有效?

问题描述:

我使用C#和ASP.NET 4 WebControls。您最喜欢的方法是检查HTML COLOR是否有效?

我在我的页面上有一个TextBox,用户可以输入HEXADECIMAL格式(ff0000)或HTML格式(“红色”)的HTML颜色。

我最初的想法是写一个RegEx能够验证这个用户的输入太困难了,所以我想出了一个想法,写一个简单的方法来检查输入的颜色是否可以转换成有效的使用System.Drawing的上下文。

下面我的代码。它返回一个Bool数据类型,说明操作是否成功。 它现在工作正常,但我想知道:

  • 如果我的方法写得很好?
  • 你知道更好的方法吗?

感谢您的考虑。

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

你的代码是最务实的,我认为 – Tobias 2011-04-06 08:58:10

我的直觉告诉微软,当涉及到像HTML颜色代码的权利。我发现你正在使用的是the source code to the class,它接受很多不是HTML颜色的东西。

正则表达式然后检查列表听起来像是一个明智的方式。

修整空白后,检查它是否匹配/^#[a-fA-F0-9]{6}$/,如果不匹配,请将其与出现在HTML中的list of 16 colours进行比较。

+0

感谢大卫·您至REGx ---但你觉得呢关于通过方法? – GibboK 2011-04-06 08:59:37

+0

我在顶部添加了一段,对您正在使用的课程进行了一些调查。 – Quentin 2011-04-06 09:04:08

+0

谢谢大卫,我会试试广告,让你知道肯定。现在感谢。 – GibboK 2011-04-06 09:08:35

异常处理很重,应该作为最后手段使用,并且只能用于实际异常。尝试这个。它检查一个有效的html十六进制颜色,然后尝试命名的颜色。

protected static bool CheckValidFormatHtmlColor(string inputColor) 
{ 
     //regex from http://*.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; 
} 

所有的一个正则表达式,只是为了好玩。我最后是不区分大小写的。可能不快,但“一枪”。

HTML颜色

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

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

你错过了hsl和hsla的配色方案 – 2016-06-16 17:20:41

+0

@SuryaPratap对!我想只是复制rgb&rgba片断可能会有所斩获。或者还可以添加内部(rgb | hsl)和(rgba | hsla)开关。 – FrancescoMM 2016-06-17 14:27:13

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 
}