在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
}
}