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

标签 php regex string

您好,我使用正则表达式尝试了以下代码

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

//output => New_text

( _ 除了 char )

一切都很完美,但是当我输入的字符串类似于其他语言(例如印地语)时,印地语中的字符会 也删除。

同上例

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

//output => _

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

正则表达式或 PHP 中我们可以做的任何其他方式是否有任何错误?

最佳答案

你需要使用

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

参见 regex demo

PHP PCRE正则表达式似乎不匹配带有\W/u修饰符的组合标记,所以,我们需要使用相应的[^\w] 否定字符类并在其中添加 \p{M} Unicode 属性(组合标记)。

参见 more on Unicode properties here .

关于PHP:如何从字符串中删除特殊字符(某些除外),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38013235/

相关文章:

php - 无法使用 PHP 7.2 从 MySQL 数据库中选择数据

Java 正则表达式 : find single quoted text with escapes

regex - Powershell将正则表达式值保留在变量中,然后构建字符串

c 中的字符和字符串与 strpbrk

c# - C#字符串到DateTime的转换

PHP7 的 substr() 对 null/空字符串的行为

php - 删除和集中冗余的 HTML 代码

php - 如何使用 PHP 将多个 XML 价格插入到 SQL 表中

php - 使用 TCPDF 的空白 pdf 文件

regex - 如何将变量插入正则表达式 .match() 断言中?