1. 程式人生 > 其它 >如何對使用者輸入的資料進行驗證

如何對使用者輸入的資料進行驗證

為了保證使用者輸入系統的資料是有效的,同時也是為了避免程式出現不可預期的問題,保證應用程式能夠安全的執行,所以對輸入的資料進行驗證是非常有必要的。
剛開始學程式碼的時候,我是這樣進行資料校驗的

看上去是不是很醜陋...,表單資料多的時候往往能寫上幾百上千行的if判斷語句。並且每個需要儲存更新資料的地方都需要編寫這樣的驗證程式碼...
後來,稍微學會點了偷懶的技巧,把資料的驗證放到了物件裡,這樣客戶端每次只需要呼叫驗證方法就可以對資料進行驗證。

public IEnumerable<Tuple<bool, string>> Validate()
{
    if (string.IsNullOrEmpty(Name))
    {
        yield return new Tuple<bool, string>(false, "客戶姓名不允許為空!");
    }
    if (Age > 0 && Age <= 120)
    {
        yield return new Tuple<bool, string>(false, "年齡的有效範圍是1~120歲!");
    }
    if (string.IsNullOrEmpty(Phone))
    {
        yield return new Tuple<bool, string>(false, "電話號碼不允許為空!");
    }

    //... 以下還有一百行程式碼
}

// 客戶端呼叫程式碼
foreach (var item in custom.Validate())
{
    if (!item.Item1)
    {
        Console.WriteLine(item.Item2);
        return;
    }
}

再後來,看到了別人通過給物件成員新增校驗特性,在提交資料時通過反射獲取物件成員宣告的特性進行校驗,進一步簡化了程式碼。你可以自己去定義資料驗證的相關驗證特性類和驗證處理的程式碼,但作為一個懶人,我通過使用.NET提供的System.ComponentModel.DataAnnotations.dll庫中的校驗特性和驗證處理類就可以很簡單的實現資料的校驗。如果你之前寫過ASP.NET MVC相關的程式碼,應該對他比較熟悉

    public class Custom
    {
        [Required]
        public string Name { get; set; }
        [Required]
        [Range(0, 2)]
        public int Sex { get; set; }
        [Required]
        [MaxLength(11)]
        public string Phone { get; set; }
        [Required]
        [Range(1, 120, ErrorMessage = "年齡選擇範圍1~120歲")]
        public int Age { get; set; }

        //... 以下還有一百行程式碼
    }

關於更多的System.ComponentModel.DataAnnotations資料https://docs.microsoft.com/zh-cn/dotnet/api/system.componentmodel.dataannotations?view=net-6.0