我有一个设置为日期作为值输入的字段,但是无论何时输入日期,AngularJs都会在字段上返回错误。
这个模式就是这样的
ng-pattern='/^(?:(((Jan(uary)?|Ma(r(ch)?|y)|Jul(y)?|Aug(ust)?|Oct(ober)?|Dec(ember)?)\ 31)|((Jan(uary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|(Sept|Nov|Dec)(ember)?)\ (0?[1-9]|([12]\d)|30))|(Feb(ruary)?\ (0?[1-9]|1\d|2[0-8]|(29(?=,\ ((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))))\,\ ((1[6-9]|[2-9]\d)\d{2}))/'我已经在regexr上测试了模式,并且它正在工作。我测试的日期是2016年6月30日的,
发布于 2016-07-09 03:42:13
我仔细研究了您的regex (经过很好的考虑),最后根据您的概念重写了它。
我的结局是:
((Jan(uary)?|Mar(ch)?|July?|Aug(ust)?|Oct(ober)?|Dec(ember)?) 31|(Jan(uary)?|Mar(ch)?|Apr(il)?|July?|June?|Aug(ust)?|Oct(ober)?|Sep|(Sept|Nov|Dec)(ember)?) (0?[1-9]|([12]\d)|30)|Feb(ruary)? (0?[1-9]|1\d|2[0-8]|29(?=, ((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(16|[2468][048]|[3579][26])00)))), (1[6-9]|[2-9]\d)\d{2}下面是一个例子:https://regex101.com/r/gS0xB4/1
在这里,它被打破了一点:
( // Begin get month and a day
(Jan(uary)?|Mar(ch)?|July?|Aug(ust)?|Oct(ober)?|Dec(ember)?) 31 // Months with 31 days, and a 31
| // OR
(Jan(uary)?|Mar(ch)?|Apr(il)?|July?|June?|Aug(ust)?|Oct(ober)?|Sep|(Sept|Nov|Dec)(ember)?) // Every month but Feb, and...
(0?[1-9]|([12]\d)|30) // A number from 1-30, optionally padded to 2 digits
| // OR
Feb(ruary)? // Feburary, and...
(0?[1-9]|1\d|2[0-8] // A number from 1-28, optionally padded to 2 digits
| // OR
29(?=, ( // A 29, IF it is followed by a comma and...
(1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26]) // A year which is a multiple of 4, but not a multiple of 100
| // OR
(16|[2468][048]|[3579][26])00) // A year which is a multiple of 400
) // End 29 conditional
) // End Feb
) // End month and day
, (1[6-9]|[2-9]\d)\d{2} // A comma, and a year between 1600 and 9999我没有任何捕捉组来分割它,因为我只是想让它匹配--但是它们应该是相当容易加入的。我还删除了所有的逃逸,所以如果引擎需要的话,您可能必须将它们添加回。
https://stackoverflow.com/questions/38230587
复制相似问题