您好我试用下面的代码使用正则表达式
$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中的任何其他方式做错吗?
答案 0 :(得分:2)
使用unicode属性:
$str = preg_replace("/[^\p{L}\p{N}\p{Z}_]/u", '', 'कपिल शर्मा % * _');
其中
\p{L}
代表任何语言的任何字母\p{N}
代表任何语言的任何数字\p{Z}
代表任何类型的分隔符。u
unicode标志答案 1 :(得分:2)
您需要使用
'~[^\p{M}\w]+~u'
请参阅regex demo
似乎PHP PCRE正则表达式与\W
和/u
修饰符的组合标记不匹配,因此,我们需要使用相应的[^\w]
否定字符类并添加{{1那里有Unicode属性(组合标记)。
答案 2 :(得分:0)
您可以使用filter_var
filter_var('your string &% * _',FILTER_SANITIZE_STRING | FILTER_FLAG_STRIP_HIGH);
或者如果你可以使用小符号,你可以使用str_replace
$arrayRequer = array('*','_','^','%');
str_replace($arrayRequer,'',$yourString);