我使用C#和ASP.NET 4 WebControls。
我的页面上有一个TextBox,用户可以输入HEXADECIMAL格式(ff0000)或HTML格式(“红色”)的HTML颜色。
我最初的想法是编写一个能够验证此用户输入的RegEx会很困难,所以我想出了一个简单的方法来检查输入的颜色是否可以转换为有效的使用方法System.Drawing的上下文。
在我的代码下面。它返回一个Bool DataType,说明操作是否成功。 它现在工作正常,但我想知道:
感谢您的考虑。
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;
}
}
答案 0 :(得分:7)
我的直觉是说,当谈到像HTML颜色代码这样的东西时,微软不信任微软。我找到了你正在使用的the source code to the class,它接受了很多不是HTML颜色的东西。
然后检查列表的正则表达式听起来像是明智的前进方式。
修剪空格后,检查它是否与/^#[a-fA-F0-9]{6}$/
匹配,如果不匹配,则将其与HTML中显示的list of 16 colours进行比较。
答案 1 :(得分:6)
异常处理很重,应该作为最后的手段使用,仅用于实际异常。试试这个。它检查有效的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;
}
答案 2 :(得分:3)
一个正则表达式,只是为了好玩。最后的i是不区分大小写的。可能不快,但“一枪”。
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
答案 3 :(得分: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
}
答案 4 :(得分:0)
Main
方法
static void Main(string[] args)
{
List<string> testColors = new List<string>
{
null
,""
,"#00"
,"#000"
,"#12345aa"
,"#fff1az"
,"#FFDFD991"
,"ajdoajsdoijsaod"
};
foreach (var color in testColors)
{
bool result = IsHtmlColor(color);
Console.WriteLine($"IsHtmlColor({color}) => {result}");
}
}
辅助方法
public static bool IsHtmlColor(string hexa)
{
try
{
// using System.Windows.Media;
return ColorConverter.ConvertFromString(hexa) is Color;
}
catch
{
return false;
}
}