我有这个替换有效日期:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
所以这样的日期:2016年8月25日将被替换。
我的问题是,有时用户会写这样的日期:
$date = preg_replace('~(\d{2})/(\d{2})/(\d{2,4})~', '', $date);
我希望能够得到这个。有什么想法吗?
答案 0 :(得分:2)
我会使用strtotime
验证日期范围,而不是正则表达式。
$array = array('082/5/2016', '0825/2016', '08/252/016', '08/25/201', '0/85/2016', '08/25/2016');
foreach($array as $key => $date) {
if(!strtotime($date)) {
unset($array[$key]); //or handle the invalid date however you want
}
}
print_r($array);
答案 1 :(得分:2)
如果您有"字符串,例如日期"在您的输入中,您可以使用具有正向lookbehind的正则表达式来确保数字和正斜杠块包含7到8位数字,然后跟着一个单词边界:
'~\b(?=(?:\D*\d){7,8}\b)\d+(?:/\d+)+\b~'
请参阅regex demo。
<强>详情:
\b
- 领先的字边界(?=(?:\D*\d){7,8}\b)
- 前瞻性要求字边界后跟7到8位数字,用任意数量的非数字分隔\d+
- 一位或多位(?:/\d+)+
- 一个或多个/
+ 1个或更多个数字\b
- 尾随字边界。$str = "Text containing \n082/5/2016\n0825/2016\n08/252/016\n08/25/201\n0/85/2016\n08/25/2016";
$result = preg_replace('~\b(?=(?:\D*\d){7,8})\d+(?:/\d+)+\b~', "", $str);
echo $result;