PHP:替换数组中的所有单词
我试图用PHP解析用户输入的字符串日期。我需要删除除这两个可接受类别以外的所有字符:PHP:替换数组中的所有单词,php,regex,date,Php,Regex,Date,我试图用PHP解析用户输入的字符串日期。我需要删除除这两个可接受类别以外的所有字符: 1) [0-9,\./-] (numerals, comma, period, slash, and dash) 2) An array of acceptable words: $monthNames=array( "january"=>1, "jan"=>1, "february"=>2, "feb"=>2
1) [0-9,\./-] (numerals, comma, period, slash, and dash)
2) An array of acceptable words:
$monthNames=array(
"january"=>1,
"jan"=>1,
"february"=>2,
"feb"=>2
);
我尝试对字符单词bounaries进行explode()分解,然后删除数组中不存在的每个部分,但这导致了相当混乱的局面。有没有一种优雅的方法可以做到这一点
谢谢 避免这种情况的最佳方法是将日期条目设置为只有有效选项的表单,并放弃其余选项。您可以使用正则表达式匹配日期,下面是一个非常简单、基本的表达式:
preg_match('/((Jan|Feb|Dec|\d{1,2})[ .\/-]){2,2}\d{1,4}/i', $str, $matches);
echo $matches[0];
不过,你还得加上其他几个月
关于失眠之夜的进一步想法:
- 不允许月份<1和>12
- 2011年1月禁止
- 不允许奇怪的岁月
- 扔掉它,找一个好的;)李>
注意事项:
您可以使用
strotime()
要检查故障,请执行以下操作:
$str = 'Not Good';
// previous to PHP 5.1.0 you would compare with -1, instead of false
if (($timestamp = strtotime($str)) === false) {
echo "The string ($str) is bogus";
} else {
echo "$str == " . date('l dS \o\f F Y h:i:s A', $timestamp);
}
看
另外,DateTime::createFromFormat()
可能会有用
请参见您应该显示您的代码,以便更清楚地了解您的目标。您是否使用php的内置数组()函数
strotime()
strotime()需要特定的格式,这些用户输入从“1977年1月12日”到“1977年12月1日”到“1977年1月12日”到“Turkiye”的所有内容。我已经确定了大约六到七种可能是合法日期的变体。@ford:str_replace()函数将接受数组作为参数,但只接受要替换的项!我可以在片段上使用in_数组,但是我也会在数字的正则表达式中遇到麻烦。这就是为什么我没有粘贴代码的原因:从我要去的方向看,似乎没有太多可以挽救的东西,所以我希望听到一个更优雅的解决方案。这是多年来输入的数据。这不是新数据。我不确定,这是否完美地工作:如果输入字符串是“一月三日二月七日XYZ”,会发生什么?确实,您的示例演示了一个缺少的逻辑:在替换步骤之前,所有大写字母都应该去掉。修改的代码-添加了删除大写字母的初始步骤。好的,那么:如果输入字符串是1月3日-2月7日
?@Cassy-最初说明的问题不包括“一月”,因此您将(正确地)留下“2月3日7日”。现在,您可以说$monthNames数组不完整-事实就是如此。在这种情况下,正确的结果将取决于是否将“一月”作为键包含。
echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";
$str = 'Not Good';
// previous to PHP 5.1.0 you would compare with -1, instead of false
if (($timestamp = strtotime($str)) === false) {
echo "The string ($str) is bogus";
} else {
echo "$str == " . date('l dS \o\f F Y h:i:s A', $timestamp);
}