我想用相应的输入字段替换日期模式字符串(intl扩展名)。
模式可以是:
dd.MM.yy
dd.MM.yyyy
M/d/yy
M/d/yyyy
dd/MM/y
dd/MM/yyyy
我的代码是:
$date_pattern = 'M/d/yy';
$search = array('/[d|dd]/', '/[M|MM]/', '/[y|yy|yyyy]/');
$replace = array(
'<input type="text" name="day" size="2" maxlength="2">',
'<input type="text" name="month" size="2" maxlength="2">',
'<input type="text" name="year" size="4" maxlength="4">');
print preg_replace($search, $replace, $date_pattern);
问题是,&#34; preg_replace&#34;匹配位置的第一个替换输入字段:
<input t[here because of the 'y' character]pe="text" ...>
有没有办法告诉preg_replace忽略已经更换的部分?
答案 0 :(得分:2)
您的正则表达式看起来并不正确,因为[d|dd]
仅匹配d
或文字|
。
更好地使用正则表达式中的单词边界:
$search = array('/\bd{1,2}\b/', '/\bM{1,2}\b/', '/\b(?:y{1,2}|y{4})\b/i');
print preg_replace($search, $replace, $date_pattern);
<强>输出:强>
<input type="text" name="month" size="2" maxlength="2">/<input type="text" name="day" size="2" maxlength="2">/<input type="text" name="year" size="4" maxlength="4">