您最喜欢的检查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 COLOR是否有效的方法是什么?

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