c#中的正则表达式分组
本文关键字:正则表达式 | 更新日期: 2023-09-27 17:50:49
我正在尝试在c#中验证日期。
我需要检查以下格式:
dd/mm/yy
dd/mmm/yyyy
dd-mm-yy
下面的表达式抛出异常:
@"^(*'d{2}+[-'])+(['w{3}]|['d{2}])+('d{2,4})$"
请指出表达式中的错误
^('d{2})(['/-])('w{3}|'d{2})'2('d{2,4})$
我想你需要这个。
`^(*`
^^
这个量词给出了错误,因为它没有什么可量化的。
看演示。https://regex101.com/r/tS1hW2/2
回答你关于正则表达式的问题,有几个问题。
- 关键是
(*
一开始的问题(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})$
查看RegexStorm支持。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