2011-04-06 56 views
5

我使用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; 
      } 
     } 
+1

你的代碼是最務實的,我認爲 – Tobias 2011-04-06 08:58:10

回答

7

我的直覺告訴微軟,當涉及到像HTML顏色代碼的權利。我發現你正在使用的是the source code to the class,它接受很多不是HTML顏色的東西。

正則表達式然後檢查列表聽起來像是一個明智的方式。

修整空白後,檢查它是否匹配/^#[a-fA-F0-9]{6}$/,如果不匹配,請將其與出現在HTML中的list of 16 colours進行比較。

+0

感謝大衛·您至REGx ---但你覺得呢關於通過方法? – GibboK 2011-04-06 08:59:37

+0

我在頂部添加了一段,對您正在使用的課程進行了一些調查。 – Quentin 2011-04-06 09:04:08

+0

謝謝大衛,我會試試廣告,讓你知道肯定。現在感謝。 – GibboK 2011-04-06 09:08:35

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; 
} 
3

所有的一個正則表達式,只是爲了好玩。我最後是不區分大小寫的。可能不快,但「一槍」。

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 
+0

你錯過了hsl和hsla的配色方案 – 2016-06-16 17:20:41

+0

@SuryaPratap對!我想只是複製rgb&rgba片斷可能會有所斬獲。或者還可以添加內部(rgb | hsl)和(rgba | hsla)開關。 – FrancescoMM 2016-06-17 14:27:13

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 
} 
相關問題