2

我想问一下如何从字符串中删除特殊字符(从报废的页面中提取)。

 4:30am

我只是想获得时间,所以我尝试使用以下方法对其进行过滤:

$str = 'Â 4:30am';
$new_string = preg_replace("[^A-Za-z0-9]", "", $str); 
echo '<pre>'.$new_string.'</pre>';

但它不会改变:| 有什么解决方案/方法吗?

4

7 回答 7

8

您的正则表达式无效...

$str = 'Â 4:30am';
$new_string = preg_replace("~[^a-z0-9:]~i", "", $str); 
echo '<pre>'.$new_string.'</pre>';

...并且您在正则表达式中忘记了“:”,因此在您的情况下它将被删除。

于 2012-12-27T09:10:50.420 回答
5

您的正则表达式模式需要用分隔符括起来。您当前的模式使用[and]作为分隔符,这很可能不是您打算做的。

preg_replace("/[^A-Za-z0-9]/", "", $str); 

http://pl.php.net/manual/en/regexp.reference.delimiters.php

于 2012-12-27T09:10:40.533 回答
4

您可以使用filter_var

$str = 'Â 4:30am';
$str = filter_var($str,FILTER_SANITIZE_STRING,FILTER_FLAG_STRIP_HIGH);
echo $str ;

输出

4:30am
于 2012-12-27T09:20:19.940 回答
3

使用$new_string = preg_replace("/[^A-Za-z0-9]/", "", $str);应该修复它。

的第一个参数preg_replace是模式,需要用/or之类的东西包围@

在您的情况下,您正在使用模式[^A-Za-z0-9]where[]被视为模式分隔符。所以实际匹配的模式变为^A-Za-z0-9,它与输入中的任何内容都不匹配。

于 2012-12-27T09:11:02.090 回答
1

要获得时间:

$str = 'Â 4:30am';
$time = preg_match('/(?P<time>\d?\d:\d\d(?:am|pm))/', $str, $match);
var_dump($match);
于 2012-12-27T09:11:36.493 回答
1

试试这个

$new_string = preg_replace("^[A-Za-z0-9]", "", $str); 
于 2012-12-27T09:12:59.303 回答
0
$str = 'Â 4:30am';
$new_string = preg_replace("^\W", "", $str); 
echo '<pre>'.$new_string.'</pre>';
于 2012-12-27T09:13:49.820 回答