检查字符串中的数字是否包含c#中的有效年份

时间:2015-02-13 13:44:26

标签: c# asp.net

我有一个以下字符串,需要确保字符串中的数字是有效年份。所以在这种情况下2014年。

var notesField = "Payment for the month ending 30 Nov 2014";
char[] whitespace = new char[] { ' ', '\t' };
string[] text = notesField.Split(
                          whitespace,
                          StringSplitOptions.RemoveEmptyEntries
                          );

2 个答案:

答案 0 :(得分:4)

你不能 - 任何正整数(在理论上)是一个潜在有效的年份。你需要提出一个合理的定义“有效年份”,一个例子可能是“2005年到2020年之间的4位数字”(例如,如果你只希望看到最近或将来的日期)。 / p>

这当然不处理"Bob gave Alice 2014 cows"情况 - 为了解决这个问题,你可以尝试聪明并做一些基本的日期解析(例如识别字符串的"30 Nov"部分),但是一般这是一个难以解决的问题 - 考虑如果您的系统遇到名为“June”的人会发生什么?

处理此问题的最佳方法是对输入进行限制,以便更轻松地进行验证。理想情况下,你会提供一个专门用于输入日期的单独控件,但是如果你出于某种原因坚持使用文本输入,你可以只查找"Payment for the month ending {Day} {Month} {Year}"形式的字符串 - 你对输入越放宽你期望更难你将要尝试解析的时间验证它。

答案 1 :(得分:0)

从不推荐以这种方式查找或验证年份的方法,但如果您确定句子中只有一个四位数的单词,那么您可以使用如下所示的正则表达式匹配。

using System;
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {
        Regex regex = new Regex(@"\d{4}");
        Match match = regex.Match("Payment for the month ending 30 Nov 2014");
        if (match.Success)
        {
            Console.WriteLine(match.Value);
        }
    }
}

工作小提琴是here