本帖最后由 caruko 于 2011-5-30 13:20 编辑
瑞年没有太精确。
就是把所有不合法的匹配串写进去,符合了就是不合法的。只是每个字串只匹配1-2个特征。
^[04-9] 指0000-0999 4000-9999年段。
^[3][1-9][1-9][1-9] 3111-3999好吧,这个其实不准确,没有包括3001-3099,要分成3个很麻烦。
^[0-9][0-9][0-9][0-9][2-9][0-9][0-9][0-9]$ ^[0-9][0-9][0-9][0-9][0-9][0-9][4-9][0-9]$ 指 月份不能是 20以上以及日期不能是40以上。
后面的分别对 13578,10,12 月限定 < 32, 469,11 <31 ,2月则根据年份最后一位是否02468,来决定是28还是29。
最后是限定 月份个位以及日期个位 <> 0
[^0-9] 去掉数字以外的字符,忘记了符号限定,修改一下。
呃,可以set计算的话,那么简单了。。
findstr判断了年份个位为13579的出现 0229为不合法,set 判断 02468后缀的年份情况。- echo,%input%|findstr "^[04-9] [^0-9] ^[3][1-9][1-9][1-9][0-9] ^[0-9][0-9][0-9][0-9][2-9][0-9][0-9][0-9]$ ^[0-9][0-9][0-9][0-9][0-9][0-9][4-9][0-9]$ ^[0-9][0-9][0-9][0-9][1][3-9][0-9][0-9] ^[0-9][0-9][0-9][0-9][0][469][3][1-9]$ ^[0-9][0-9][0-9][0-9][0][13578][3][2-9]$ ^[0-9][0-9][0-9][0-9][0][2][3-9][0-9]$ ^[0-9][0-9][0-9][13579][0][2][2][9]$ ^[0-9][0-9][0-9][0-9][1][02][3-9][2-9]$ ^[0-9][0-9][0-9][0-9][1][1][3-9][1-9]$ ^[0-9][0-9][0-9][0-9][0-9][0][0-9][0]$" >nul&& set input=10010229
- 2>nul set /a 1 / (%input:~0,4% %% 4) && (set /a 1 / (1%input:~4% - 10229) && echo,合法 || echo,不合法 ) || echo,合法
复制代码
|