【问题标题】:Validating School Year [closed]验证学年[关闭]
【发布时间】:2013-02-03 10:12:26
【问题描述】:

我问的是SchoolYear

就像这个例子

2013-2014 (StartYear-EndYear)

如何验证用户是否真正进入学年(例如2013-2014

这是我迄今为止尝试过的。

 private void TextBox_Validating(object sender, CancelEventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(studentLastSchoolAttendedSchoolYearTextBox.Text))
            {
                int fromYear = 0;
                int toYear = 0;
                string[] years = Regex.Split(studentLastSchoolAttendedSchoolYearTextBox.Text, @"-");

                fromYear = int.Parse(years.FirstOrDefault().ToString());
                if (fromYear.ToString().Length == 4)
                {
                    if (years.Count() > 1)
                    {
                        if (!string.IsNullOrWhiteSpace(years.LastOrDefault()))
                        {
                            toYear = int.Parse(years.LastOrDefault().ToString());
                            if (fromYear >= toYear)
                            {
                                e.Cancel = true;
                                MessageBox.Show("The 'From Year' must be lesser than to 'To Year'.\n\nJust leave as a empty to avoid validating.", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            }
                        }
                        else
                        {
                            e.Cancel = true;
                            MessageBox.Show("Please enter a valid School range Year format.\nEx.: 2010-2011\n\nJust leave as empty to avoid validating.", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }
                    else
                    {
                        studentLastSchoolAttendedSchoolYearTextBox.Text = fromYear.ToString() + "-" + Convert.ToInt32(fromYear + 1).ToString();
                    }
                }
                else
                {
                    e.Cancel = true;
                    MessageBox.Show("Please enter a valid School range Year format.\nEx.: 2010-2011\n\nJust leave as empty to avoid validating.", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
        }

【问题讨论】:

  • 对于拥有如此声誉的人来说,这似乎是一个质量问题!
  • 什么是正确的格式?
  • @spajce 这完全没有帮助。您来到这里并发布了您正在使用的代码 sn-p。你当初为什么来这里?你的解决方案有什么问题?在某些情况下它会返回不正确的值吗?它会抛出异常吗?是不是太慢了?还不够漂亮吗?你只是无聊并想打发时间吗?什么?
  • @spajce 不,一点都不清楚。你来到这里显然是因为你有一个你想要解决的问题。我们不知道那个问题是什么,所以我们无法做出任何合理的尝试来解决它。您是否不知道您的函数应该 的有效输入是什么,这意味着您不知道哪些类型的字符串应该是有效的(在代码之外,只是自己查看),如果是这样,这是题外话,我们真的不能帮助你。你需要自己弄清楚。

标签: c# date


【解决方案1】:
public bool IsSchoolYearFormat(string toCheck)
{
    string[] arr = toCheck.Trim().Split('-'); //splits the string, eg 2013-2014 goes to 2013 and 2014
    if (arr.Length != 2) //if there is less or more than two school years it is invalid.
    {
        return false;
    }
    int one, two;
    if (!int.TryParse(arr[0], out one))
    {
        return false;
    }
    if (!int.TryParse(arr[1], out two))
    {
        return false;
    }
    //if they don't parse then they are invalid.
    return two - 1 == one && two > 1900 && one > 1900; //to please AbZy
    //school year must be in the format yeara-(yeara+1)
}

【讨论】:

  • @Servy 谢谢你为我争论 :) 我很忙。
  • +1,这个答案..是正确的。但看起来像先生。 @AbZy想进入1年:D
【解决方案2】:

假设2013-2014 是有效格式,这可能是一个有效的函数:

public static bool IsSchoolYearFormat(string format, int minYear, int maxYear)
{
    string[] parts = format.Trim().Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
    if (parts.Length == 2)
    {
        int fromYear; int toYear;
        if (int.TryParse(parts[0], out fromYear) && int.TryParse(parts[1], out toYear))
        {
            if (fromYear >= minYear && toYear <= maxYear && fromYear + 1 == toYear)
                return true;
        }
    }
    return false;
}

【讨论】: