您最喜欢的方法是检查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;
}
}
我的直觉告诉微软,当涉及到像HTML颜色代码的权利。我发现你正在使用的是the source code to the class,它接受很多不是HTML颜色的东西。
正则表达式然后检查列表听起来像是一个明智的方式。
修整空白后,检查它是否匹配/^#[a-fA-F0-9]{6}$/
,如果不匹配,请将其与出现在HTML中的list of 16 colours进行比较。
异常处理很重,应该作为最后手段使用,并且只能用于实际异常。尝试这个。它检查一个有效的html十六进制颜色,然后尝试命名的颜色。
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;
}
所有的一个正则表达式,只是为了好玩。我最后是不区分大小写的。可能不快,但“一枪”。
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
你错过了hsl和hsla的配色方案 – 2016-06-16 17:20:41
@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
}
你的代码是最务实的,我认为 – Tobias 2011-04-06 08:58:10