Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 您最喜欢用什么方法检查HTML颜色是否有效?_C#_Asp.net_Html - Fatal编程技术网

C# 您最喜欢用什么方法检查HTML颜色是否有效?

C# 您最喜欢用什么方法检查HTML颜色是否有效?,c#,asp.net,html,C#,Asp.net,Html,我使用C#和ASP.NET4网络控件 我的页面上有一个文本框,用户可以输入十六进制格式(ff0000)或HTML格式(“红色”)的HTML颜色 我最初的想法是,编写一个能够验证此用户输入的正则表达式太难了,因此我想出了一个主意,编写一个简单的方法来检查输入的颜色是否可以转换为有效的颜色,以便在System.Drawing的上下文中使用 下面是我的代码。它返回一个Bool数据类型,说明操作是否成功。 目前运行良好,但我想知道: 如果我的方法写得好 你知道更好的方法吗 谢谢你的考虑 using

我使用C#和ASP.NET4网络控件

我的页面上有一个文本框,用户可以输入十六进制格式(ff0000)或HTML格式(“红色”)的HTML颜色

我最初的想法是,编写一个能够验证此用户输入的正则表达式太难了,因此我想出了一个主意,编写一个简单的方法来检查输入的颜色是否可以转换为有效的颜色,以便在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颜色代码时,我不信任微软。我发现了你正在使用的东西,它接受了很多非HTML颜色的东西

一个正则表达式然后对照一个列表进行检查听起来是一个明智的方法


修剪空白后,检查它是否匹配
/^[a-fA-F0-9]{6}$/
,如果不匹配,请将其与HTML中显示的内容进行比较

异常处理非常繁重,应作为最后手段使用,且仅适用于实际异常。试试这个。它检查有效的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;
}

为所有人准备一个正则表达式,只是为了好玩。最后的i表示案例不敏感。可能不快,但“一枪”

HTML颜色

/^(#[a-f0-9]{6}|black|green|silver|gray|olive|white|yellow|maroon|navy|red|blue|purple|teal|fuchsia|aqua)$/i
/^(#[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
CSS颜色

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

Main
方法

static void Main(字符串[]args)
{
List testColors=新列表
{
无效的
,""
,"#00"
,"#000"
“#12345aa”
“#fff1az”
“#FFDFD991”
,“ajdoajsdoijsaod”
};
foreach(testColors中的变量颜色)
{
bool结果=IsHtmlColor(颜色);
WriteLine($“IsHtmlColor({color})=>{result}”);
}
}
辅助方法

公共静态bool IsHtmlColor(字符串十六进制)
{
尝试
{
//使用System.Windows.Media;
返回ColorConverter.ConvertFromString(hexa)是颜色;
}
抓住
{
返回false;
}
}

你的代码是最实用的,我想谢谢David的regx,但是你觉得用方法怎么样?我在顶部添加了一段,对你正在使用的类做了一些调查。谢谢David,我会试用广告,让你知道。现在谢谢。我的直觉告诉我这个方法接受CSS颜色值。只是在2000年左右,当它被写下来的时候,很多人脑海中的区别可能没有那么明显。你错过了hsl和hsla的颜色schemes@SuryaPratap正确的!我想只要复制rgb和rgba片段就可以了。或者还添加了内部(rgb | hsl)和(rgba | hsla)开关。alpha还有4和8个长度十六进制。应该是“#[a-f0-9]{8}|#[a-f0-9]{6}|#[a-f0-9]{3,4}”?欢迎使用StackOverflow。请提供一些解释,为什么您认为您提出的解决方案可能有助于OP。