C# 使用csv验证特定长度字符串格式的正则表达式
我正在尝试编写一个正则表达式,它验证一个文本框是否只有长度为5或9的数字。我找到了下面的正则表达式来完成这项工作C# 使用csv验证特定长度字符串格式的正则表达式,c#,asp.net,regex,asp.net-mvc-3,pattern-matching,C#,Asp.net,Regex,Asp.net Mvc 3,Pattern Matching,我正在尝试编写一个正则表达式,它验证一个文本框是否只有长度为5或9的数字。我找到了下面的正则表达式来完成这项工作 ^\d{1,5}([,]\d{5})*$ 但它不能正确地解决我的需求,请任何人帮助我修改或编写一个新的正则表达式,它支持下面的模式 0910309101,有效(以逗号结尾) 0910309101有效(不以逗号结尾) 123451234567无效(如果第一个数字的长度为5,第二个数字的长度小于9,则不应支持) 12345123456789有效(必须仅支持数字长度5或9) 请尝试以下
^\d{1,5}([,]\d{5})*$
但它不能正确地解决我的需求,请任何人帮助我修改或编写一个新的正则表达式,它支持下面的模式
- 0910309101,有效(以逗号结尾)
- 0910309101有效(不以逗号结尾)
- 123451234567无效(如果第一个数字的长度为5,第二个数字的长度小于9,则不应支持)
- 12345123456789有效(必须仅支持数字长度5或9)
var lines = new []
{
"09103,09101,",
"09103,09101",
"12345,1234567",
"12345,123456789",
"12345"
};
var re = new Regex(@"^\d{1,5}(,(\d{5}|\d{9}))?,?$");
foreach (var line in lines)
{
Console.WriteLine("{0} = {1}", line, re.IsMatch(line) ? "Valid" : "Invalid");
}
输出
09103,09101, = Valid
09103,09101 = Valid
12345,1234567 = Invalid
12345,123456789 = Valid
12345 = Valid
您可以在这里运行它:对于您的确切测试用例,尝试一下这个
^\d{5},?$|^\d{5},\d{5},?$|^\d{5},\d{9},?$
它使用|
字符来分隔“可选”模式,读作“或”。即
只需将前面带有逗号的部分设置为可选,这样它将只匹配
12345
或12345,
^(?:\d{5}|\d{9})(?:,(?:\d{5}|\d{9}))?,?$
这是
2267567
,45365,
有效吗?看起来是对的,你能给出你如何检查的代码吗?@AvinashRaj:这是错误的。第一个值是22,它不应该匹配。我们想要12345或123456789,你能改一下吗。如果我只给出12345,它也应该起作用。我添加了“仅给出12345”条件。如果我给出的值为12345或12345,它也应该起作用,但与您的解决方案不起作用。已更新,以包括单个五位数的情况。还有其他情况吗?像一个九位数的数字或两个九位数的数字?似乎工作得很好。让我再测试一些场景。我会把你的答案标记为正确的
^(?:\d{5}|\d{9})(?:,(?:\d{5}|\d{9}))?,?$