在ASP.NET平台下.用戶可以使用控件和正則表達式在服務器端實現輸入驗證,相對來說驗證控件使 用簡單 且能滿足大部分需求 但說句實話 偶對這些東東是不敢恭維
Microsoft Visual Studio驗證控件 既是客戶端驗證又是服務器端驗證 當我們觸發驗證 就會自動生 成很多客戶端腳本 如果我們單擊按扭不但要觸發驗證 還要寫一些其它的腳本 驗證將可能失效 在項目 中為了防止這類意外發生 有人提了用客戶端驗證 但是敲過代碼的都曉得客戶端不安全 所以只有先服務 器端驗證有時間再加個客戶端驗證咯
服務器端驗證
問題一:驗證什麼
日期控件 下拉列表 多選 單選 還有最常用的文本框 等等。。
是否為空 是不是數字 字符串的長度等等。。
問題二:什麼時候開始驗證
什麼時候需要驗證 什麼時候需要用到那些客戶輸入 但需要注意的是驗證不能寫的到處是 我們可以定 義一個方法 專門驗證頁的輸入
問題四:異常處理
異常有兩種 一種是系統異常 一種是邏輯異常 我們要做的是對邏輯異常的處理 我寫了些驗證 其實網 上多的是 屁話少說 看代碼!。
項目公用輸入驗證
using System; using System.Collections.Generic; using System.Text.RegularExpressions; namespace Nadim.Verify.Common { /// <summary> /// 參數檢驗 /// </summary> public static class ParameterVerify { #region 檢驗字符串 /// <summary> /// 檢驗字符串是否有非法字符 /// </summary> /// <param name="strInput">輸入字符串</param> /// <returns>是否通過檢驗</returns> public static bool VerifyString(string strInput) { //參數檢查 if (strInput == null || strInput.Trim() == "") return true; //檢查是否有非法字符 if (Regex.IsMatch(strInput, "([<>'\"])|(delete from)|(drop table)")) return false; else return true; } #endregion #region 檢驗日期字符串 /// <summary> /// 檢驗日期字符串是否合法 /// </summary> /// <param name="strInput">輸入字符串</param> /// <returns>是否通過檢驗</returns> public static bool VerifyDate(string strInput) { if (strInput == null || strInput.Trim() == "") return false; try { Convert.ToDateTime(strInput); } catch (FormatException) { return false; } return true; } #endregion #region 檢驗時間字符串 /// <summary> /// 檢驗時間字符串,驗證格式(YYYY-MM-DD hh:mm:ss) /// </summary> /// <param name="strInput">要驗證的字符串</param> /// <returns>是否通過檢驗</returns> public static bool VerifyDateTime(string strInput) { //參數檢查 if (strInput == null || strInput.Trim() == "") return false; if (Regex.IsMatch(strInput, @"^(\d{4})(-|/)?((0[1-9])|(1[0-2]))(-|/)?(((0 [1-9])|([1-2][0-9]))|(3[0-1])) ([0-1][0-9])|(2[0-3]):([0-5][0-9]):([0-5][0-9])$")) return true; else return false; } #endregion #region 檢驗編碼字符串 /// <summary> /// 檢驗是否是正確的編碼字符串,格式:字母、數字、“-”、“_” /// </summary> /// <param name="strInput">輸入字符</param> /// <param name="minsize">最小長度</param> /// <param name="maxsize">最大長度</param> /// <returns>是否通過檢驗</returns> public static bool VerifyNo(string strInput, int minsize, int maxsize) { //參數檢查 if (strInput == null) return false; String expression = @"^(((\w)|(_)|(-)|(\s)){" + minsize + "," + maxsize + @"})$"; if (Regex.IsMatch(strInput, expression)) return true; else return false; } #endregion #region 檢驗數字字符串 /// <summary> /// 檢驗數字字符串 /// </summary> /// <param name="strInput">輸入字符</param> /// <param name="length">數字長度(不算小數點)</param> /// <param name="precision">小數點後的位數</param> /// <param name="allowMinus">是否允許為負數</param> /// <returns>是否通過檢驗</returns> public static bool VerifyDecimal(string strInput, int length, int precision, bool allowMinus) { String expression; //參數檢查 if (strInput == null) return false; //判斷是否可為負數 if (allowMinus) expression = @"^(-{0,1}[0-9]{0," + (length - precision).ToString() + @"}\.{0,1}|\.[0-9]{1," + precision.ToString() + @"}|-{0,1}[0-9]{1," + (length - precision).ToString() + @"}\.[0-9]{0," + precision.ToString() + @"})$"; else expression = @"^([0-9]{0," + (length - precision).ToString() + @"}\.{0,1}|\.[0-9]{1," + precision.ToString() + @"}|-{0,1}[0-9]{1," + (length - precision).ToString() + @"}\.[0-9]{0," + precision.ToString() + @"})$"; if (Regex.IsMatch(strInput, expression)) return true; else return false; } #endregion #region 檢驗變長字符串 /// <summary> /// 檢驗變長字符串 /// </summary> /// <param name="strInput">輸入字符串</param> /// <param name="minsize">最小長度</param> /// <param name="maxsize">最大長度</param> /// <returns>是否通過檢驗</returns> public static bool VerifyVarchar(string strInput, int minsize, int maxsize) { //參數檢查 if (strInput == null) return false; if (VerifyString(strInput) && strInput.Length >= minsize && strInput.Length <= maxsize) return true; else return false; } #endregion #region 檢驗整數字符串 /// <summary> /// 檢驗整數字符串 /// </summary> /// <param name="strInput">輸入字符串</param> /// <param name="allowMinus">是否允許為負數</param> /// <returns>是否通過檢驗</returns> public static bool VerifyInt(string strInput, bool allowMinus) { int i; //參數檢查 if (strInput == null) return false; try { i = Convert.ToInt32(strInput.Trim()); if (allowMinus == false && i < 0) return false; else return true; } catch (FormatException) { return false; } } #endregion } }