2014年10月2日

json轉 GUID字串檢核格式不嚴謹

foreach (object obj in args)
{
    if (obj == null)//需過濾參數=null
    {
        continue;
    }
    else if (obj.ToString().Length == 38 && obj.ToString().IndexOf("-", 0, 10) == 9)
    {
        activityId = JsonConvert.DeserializeObject<guid>(obj.ToString());
        break;
    }
    else if (obj.ToString().Length == 36 && obj.ToString().IndexOf("-", 0, 10) == 8)
    {
        activityId = Guid.Parse(obj.ToString());
        break;
    }
}

然後人家輸入一個剛好長度 38的字串,第一個 - 又剛好在第十個字元 就死了


原本我是想到用 regular expression做檢核
想了一串的 regex
Regex regGuid = new Regex("[{(]?[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[]{12}[})]?");

後來看到別人提供的做法
foreach (object obj in args)
{
    if (obj == null)
    {
        continue;
    }
    else if (Guid.TryParse(obj.ToString(), out activityId))
    {
        break;
    }
}

只是要注意 tryparse失敗的話 guid會被填成 Guid.Empty