我需要验证可以接受的(四位数)邮政编码字段:
#4的另一个例子是:4000-4007,5000
如何在C#中使用正则表达式进行验证。我的问题更多的是关于如何构建模式本身。谢谢。
更新
这就是我提出的(使用正则表达式的输入):
public override bool IsValid(object value)
{
if (value == null)
{
return true;
}
var stringValue = value.ToString().Replace(" ", "");
foreach (var pc in stringValue.Split(','))
{
if(!Regex.Match(pc, @"^(\d{4})$|^(\d{4}-\d{4})$").Success)
{
return false;
}
}
return true;
}
我有点希望在不必执行string.Split()的情况下进行验证。我不确定这是否可行。如果有人有更好的想法,请在这里发布。谢谢。
答案 0 :(得分:0)
你需要的正则表达式是
^\d{4}(-\d{4})?(,\d{4}(-\d{4})?)*$
这是以逗号分隔的一个或多个范围,其中每个范围是单个邮政编码或邮政编码短划线邮政编码。
如果您想要效率,则需要制作非捕获组,如
^\d{4}(?:-\d{4})?(,\d{4}(?:-\d{4})?)*$
答案 1 :(得分:0)
这应该可以解决问题,并在各个组件之间允许可选的空格:
^\s*(\d{4}(\s*-\s*\d{4}))(\s*,\s*(\d{4}(\s*-\s*\d{4})))*\s*$
答案 2 :(得分:0)
^((\d{4})([,-])?)+$
编辑:那个匹配在80789809以及
新:^(\d{4})(([,-])(\d{4}))*$
经过测试:
4000,4002,4005-4010,5001 yes
4000-4007,5000 yes
4000-4010 yes
4002,5001 yes
4009 yes
40004002,4005-1010,5001 no
4000-4007, 5000 no
40004010 no
4002,50012345 no
4009, no