PHP:如何从字符串中删除特殊字符(除了一些)

时间:2016-06-24 12:14:48

标签: php regex string

您好我试用下面的代码使用正则表达式

$str =  preg_replace("/[^a-z0-9_]/i", '', 'New_text % *');

//output => New_text

(_除了char)

所有工作都很完美但是当我的输入字符串类似于其他语言(ex Hindi)时,印地语Lang中的字符将会出现 也删除。

与上面的例子相同

$str =  preg_replace("/[^a-z0-9_]/i", '', 'कपिल शर्मा % * _');

//output => _

how to get: कपिल शर्मा _

我们可以用正则表达式或PHP中的任何其他方式做错吗?

3 个答案:

答案 0 :(得分:2)

使用unicode属性:

$str =  preg_replace("/[^\p{L}\p{N}\p{Z}_]/u", '', 'कपिल शर्मा % * _');

其中

  • \p{L}代表任何语言的任何字母
  • \p{N}代表任何语言的任何数字
  • \p{Z}代表任何类型的分隔符。
  • u unicode标志

Documentation

答案 1 :(得分:2)

您需要使用

'~[^\p{M}\w]+~u'

请参阅regex demo

似乎PHP PCRE正则表达式与\W/u修饰符的组合标记不匹配,因此,我们需要使用相应的[^\w]否定字符类并添加{{1那里有Unicode属性(组合标记)。

请参阅more on Unicode properties here

答案 2 :(得分:0)

您可以使用filter_var

filter_var('your string &% * _',FILTER_SANITIZE_STRING | FILTER_FLAG_STRIP_HIGH);

或者如果你可以使用小符号,你可以使用str_replace

$arrayRequer = array('*','_','^','%');
str_replace($arrayRequer,'',$yourString);