在C#中分组正则表达式

时间:2015-05-27 08:39:19

标签: c# regex validation date

我正在尝试用C#验证日期。

我需要检查以下格式:

TreeMap

以下表达式抛出异常:

Map

请指出表达式中的错误。

2 个答案:

答案 0 :(得分:2)

^(\d{2})([\/-])(\w{3}|\d{2})\2(\d{2,4})$

猜猜你需要这个。

    `^(*`

       ^^

这个量词给出了错误,因为它无法量化。

参见演示。

https://regex101.com/r/tS1hW2/2

答案 1 :(得分:1)

回答关于正则表达式的问题,有几个问题。

  • 关键是开头(*的问题(已由vks指出)
  • 另一个关键问题是+
  • 中另一个错位的量词d{2}+
  • 还有一个问题是你已经在角色类中添加了替代品。 ([\w{3}]|[\d{2}])+表示"从2个备选项中进行选择:1)\w{3},2)\d{2},1次或更多次出现"。

因此,.NET正则表达式中的正则表达式将如下所示:

^(\p{N}{2})([/-])(\p{L}{3}|\p{N}{2})\2(\p{N}{2,4})$

请参阅demo on RegexStorm that supports .NET regex

更通用的版本是^([0-9]{2})([/-])([a-zA-Z]{3}|[0-9]{2})\2([0-9]{2,4})$

,如果您要验证以字符串形式写的DateTime值,则需要DateTime.TryParseExact它们。以下是符合您要求的示例:

var fmts = new[] { "dd/MM/yy", "dd/MMM/yyyy", "dd-MM-yy"}; // Allowed formats
DateTime dt;
var valid1 = DateTime.TryParseExact("13/02/15", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// true
var valid2 = DateTime.TryParseExact("10/Apr/2012", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// true
var valid3 = DateTime.TryParseExact("23-02-10", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// true
var valid4 = DateTime.TryParseExact("01-30-15", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// false