corn表达式如何来判断是否合法

corn表达式如何来判断是否合法!比如现在用户传过来一个cron表达式的参数,例如:"10 0/5 * * *?" 怎么样能判断它的合法性呢?

[quote]
是啊,客户不知道怎么想的,提了这么一个需求,我想试着给他写成一个javabean,不过越弄越崩溃!~正则的话我还不太明白,这么写比直接用Java判断要简单么? [/quote]

话说,用java判断你要写多少if if if啊

因为corn,真的很强大
比如你写m/n 你还要判断 m+n不能超过范围
你用L,还要判断L前面不能有范围 '-' 也不能有列表 ','
你还要判断是否是闰年,是什么大小月,才能决定每个月有多少天
如果年份缺省,又正好是2月,那怎么办? 不能判断,难道要报错么?
如果出现#号,比如月份 1#2,表示每个月第2个星期2,那么你还要回过头去判断
是否星期为*号,天为?号
话说要是传过来一个带C的,你就傻了,还要附加判断另外一个日历,是否和你的各个部分匹配。。。

我个人粗略想了一下,你至少要判断好几百种情况

而且不得不把每个部分的每个字母数字都拆开

按位判断可以完全解决
比如共有N位送进来

你第一位一定是数字或者*
*的话之后一定要是空格 表示每秒
如果是0,7,8,9的话,你之后第2位必须是逗号,/,-或者空格
如果是1到5的话,之后第2位还可以跟0到9的数字和符号
如果是6的话,之后可以跟0,还有那些符号

好了,我们取0
第2位如果是空格,等于秒结束,
如果是逗号,/或者- 那么之后第3位一定要是数字
我们取逗号 0,

开始判断第3位,必须是数字
而且要大于0,如果是1到5,之后可以跟0到9和符号
如果是6,之后可以跟0和符号
我们取1 变成 0,1

第4位 简单点,我们取5 变成0,15
之后再补充点 比如 0,15-30/5
空格 秒结束

分钟判断和秒一样
依次类推,工作量非常庞大


最后
很想抽你们客户,脑子是有毛病么?

挖。。。这是个艰巨的正则任务
秒,分钟,小时到还好
每个月的天数不一样,月份还可以数字或者三位字母
主要是还有并列很多范围,L,W,#,?等配合
所有情况都要考虑,耗费精力啊。。。