我有一个以下字符串,需要确保字符串中的数字是有效年份。所以在这种情况下2014年。
var notesField = "Payment for the month ending 30 Nov 2014";
char[] whitespace = new char[] { ' ', '\t' };
string[] text = notesField.Split(
whitespace,
StringSplitOptions.RemoveEmptyEntries
);
答案 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