请帮助我,为什么这个正则表达式在所有年份的20岁时都不起作用。但如果我单独将日期作为单独的Regex.thanks预先使用,那么它是有效的。
String regex = "^(0?[1-9]|[12][0-9]|3[01])?" ;
checkRegex("02", regex);
checkRegex("22", regex);
checkRegex("20", regex);
String regex1 = "^(((19\\d\\d)|([2-9]\\d\\d\\d))\\d\\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])?" ;
checkRegex("19990802", regex1);
checkRegex("19990822", regex1);
checkRegex("19990820", regex1);
输出
02::::^(0?[1-9]|[12][0-9]|3[01])?::::true
22::::^(0?[1-9]|[12][0-9]|3[01])?::::true
20::::^(0?[1-9]|[12][0-9]|3[01])?::::true
19990802::::^(((19\d\d)|([2-9]\d\d\d))\d\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])?::::true
19990822::::^(((19\d\d)|([2-9]\d\d\d))\d\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])?::::true
19990820::::^(((19\d\d)|([2-9]\d\d\d))\d\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])?::::false
答案 0 :(得分:2)
您似乎期待一个10位数字,而不是8位数字。你的表达中间有一个额外的\\d\\d
。
^(((19\\d\\d)|([2-9]\\d\\d\\d))\\d\\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])?
^^^^^^
Here
请注意,正则表达式会接受一些7位,8位和9位数字,原因有两个。
0
选择了?
,而0
位于每个?
之后。答案 1 :(得分:1)
尝试:
String regex1 = [0-9]{4}[0-1][0-9][0-3][0-9]
我建议您使用:
string date= "19990820";
DateTime theTime= DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None);