求一正确正则表达式!谢谢大家!
要求:
对类似1027-013A-25-6091-3 货号进行验证。
货号解释:
前四位表示(月日1121表示11月21日),
后四位数字字母(大写)组合,
后跟1至2位数字,
后跟四位任意数字,
后跟1至3位数字
我写的正则
if(Regex.Match("1027-013A-25-6091-3",@"^[0-1][\d]{1}[0-3][\d]{1}-[A-Z0-9]{4}-[\d]{1,2}-[\d]{4}-[\d]{,3}$").Success)
总是验证不过去,不知道时候什么问题?
恕在下愚笨,我连如何对正则调试都不知道,请大家赐教!!谢谢了!
问题点数:40、回复次数:12Top
1 楼shclhs(hello)回复于 2005-04-04 13:59:42 得分 0
不知道Top
2 楼steedhorse(晨星)回复于 2005-04-04 14:02:05 得分 10
最后的{,3},不可以这么写,必须写{1,3}。Top
3 楼keenyliu(小妮子)回复于 2005-04-04 14:04:06 得分 10
“[0-1][\d]{1}[0-3][\d]{1}”这一段即前四位有问题!根据你写的,似乎只有两位。Top
4 楼keenyliu(小妮子)回复于 2005-04-04 14:08:01 得分 0
表示数字直接用\d{1}即可Top
5 楼xrascal(横刀夺爱)回复于 2005-04-04 14:08:29 得分 20
Regex.Match("1027-013A-25-6091-3",@"^((0[1-9])|(1[0-2]))(([0-2][0-9])|(3[0-1]))-[A-Z0-9]{4}-(\d{1,2})-((\d){4})-(\d){1,3}$").SuccessTop
6 楼keenyliu(小妮子)回复于 2005-04-04 14:09:00 得分 0
表示数字直接用\d{1}即可Top
7 楼steedhorse(晨星)回复于 2005-04-04 14:13:19 得分 0
xrascal(横刀夺爱)对于日期格式的检查的确更加严谨,但如果严格讲还是不够,因为那个还是还是会把2月30日算做正常日期。
所以我觉得倒是不如先像楼主那样简单判断一下,碰到日期,如果要严加判断,再通过另外写方法。Top
8 楼alexzhang00(三角猫)回复于 2005-04-04 14:15:12 得分 0
xrascal(横刀夺爱) 方法正确Top
9 楼keenyliu(小妮子)回复于 2005-04-04 14:18:01 得分 0
2月份的判断和年份相关,只有月份似乎不好严格控制啊。。。Top
10 楼keenyliu(小妮子)回复于 2005-04-04 14:23:53 得分 0
你参考一下这个日期的正则表达式吧
RegexValidDate = @"^(?:(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(\/|-|\.)(?:0?2\1(?:29))$)|(?:(?:1[6-9]|[2-9]\d)?\d{2})(\/|-|\.)(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[1,3-9]|1[0-2])\2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1\d|2[0-8]))$";
可用于验证0000/00/00和0000-00-00和0000.00.00这三种格式的日期Top
11 楼HardThink(还没断奶就混社会)回复于 2005-04-04 14:50:31 得分 0
吓死我了,全是高人阿,崇拜ing,
steedhorse(晨星) 说的对,不能写{,3}我后来修改成{1,3}可以正确, 但同时发现了后面几位说的问题,2月份的验证问题,太.........BT了,先凑合着用吧......哭啊。。。Top
12 楼baobei7758(陵少)回复于 2005-04-04 14:52:21 得分 0
http://www.regexlib.com/DisplayPatterns.aspx?cattabindex=5&categoryId=5Top




