删除字符串中不需要的字符


Remove unwanted characters in a string

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

 4:30am

我只想得到时间,所以我试着用这个来过滤它:

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

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

您的正则表达式无效…

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

…你在正则表达式中忘记了":",所以在你的情况下,它将被删除。

您的regex模式需要用分隔符括起来。您当前的模式使用[]作为分隔符,这很可能不是您想要做的。

preg_replace("/[^A-Za-z0-9]/", "", $str); 
http://pl.php.net/manual/en/regexp.reference.delimiters.php

您可以使用filter_var

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

输出
4:30am

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

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

在您的例子中,您正在使用模式[^A-Za-z0-9],其中[]被视为模式分隔符。因此,实际匹配的模式变成了^A-Za-z0-9,它不匹配输入中的任何内容。

获取时间:

$str = 'Â 4:30am';
$time = preg_match('/(?P<time>'d?'d:'d'd(?:am|pm))/', $str, $match);
var_dump($match);

试试这个

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