当我删除金钱字符然后它工作但我必须要求这个字符
echo "Product Name :: ".$product_name = '£5 off bookings at A1Travel';
echo "<br/>".$product_name = preg_replace('/(^([^a-zA-Z0-9$¢£€¥])*|([^a-zA-Z0-9$¢£€¥])*$)/', '', $product_name);
输出是:
‚£5 off bookings at A1Travel
期望的输出:
£5 off bookings at A1Travel
答案 0 :(得分:1)
您添加了^
和$
,这意味着它只会匹配字符串的开头或结尾。所以你需要删除它们:
/(([^a-zA-Z0-9$¢£€¥])*|([^a-zA-Z0-9$¢£€¥])*)/
这意味着你的正则表达式可以简化为:
/[^a-zA-Z0-9$¢£€¥]*/
现在让我们进一步改进它。你永远不想用任何东西替换空字符串。因此,让我们将量词从*
(零次或多次)更改为+
(一次或多次):
/[^a-zA-Z0-9$¢£€¥]+/
您会注意到这也会删除空格,所以我们也将其排除:
/[^a-zA-Z0-9$¢£€¥ ]+/
如果你想缩短它,让我们使用i
修饰符来匹配不区分大小写并删除A-Z
:
/[^a-z0-9$¢£€¥ ]+/i
经过一些调试后,似乎我们需要处理utf / unicode问题。所以让我们添加u
修饰符,如nhahtdh所说:
/[^a-z0-9$¢£€¥ ]+/ui
要对此进行测试,您还需要设置HTML页面的编码。一个简单的例子如下所示:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<?php
$product_name = '£5 off bookings at A1Travel';
echo 'Product Name :: ' . $product_name . '<br>';
$product_name = preg_replace('/[^a-z0-9$¢£€¥ ]+/ui', '', $product_name);
echo $product_name . '<br>';
?>
</body>
</html>
答案 1 :(得分:0)
您可以使用:
$input = '£5 off bookings at A1Travel';
$input = preg_replace('/[^\x00-\x7f£¢£€¥]+/u', '', $input);
//=> £5 off bookings at A1Travel
答案 2 :(得分:0)
请试试这个
$str= '£5 off bookings at A1Travel';
preg_replace('/[^\p{Latin}\d ]/u', '', $str);
答案 3 :(得分:0)
您也可以尝试这种方法,它将很有帮助
要从字符串中删除â字符
mysqli_set_charset($con,"utf8");
$price = "₹ 310.00";
$price2 = preg_replace('/[^(\x20-\x7F)]*/','', $price);
Result : 310.00
这有助于使用preg_replace从字符串中删除字符如Remove
谢谢