您最喜欢的检查HTML COLOR是否有效的方法是什么?
本文关键字:方法 有效 是什么 是否 HTML 喜欢 检查 COLOR | 更新日期: 2023-09-27 17:49:27
我使用c#和ASP。. NET 4 WebControls.
我的页面上有一个文本框,用户可以输入十六进制格式(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十六进制颜色,然后尝试命名颜色。
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颜色代码这样的事情时,我不信任微软。我发现了什么似乎是你正在使用的类的源代码,它接受了很多不是HTML颜色的东西。
一个正则表达式然后检查一个列表听起来像是明智的前进方式。
修剪空白后,检查它是否匹配/^#[a-fA-F0-9]{6}$/
,如果不匹配,将其与HTML中出现的16种颜色列表进行比较。
一个正则表达式,只是为了好玩。末尾的i表示不区分大小写。可能不会很快,但"一次"。
<<p> HTML颜色/strong>/^(#[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
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
}
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;
}
}