从阿拉伯UTF8 +英语字符串中删除非字母数字字符

6
我希望从一个字符串中删除所有非阿拉伯语、非英语和非数字的字符,除了破折号 (-)。
我已经成功地删除了非英语字母数字字符,方法如下:
$slug = ereg_replace('[^A-Za-z0-9-]', '', $string);

但对于非阿拉伯字母数字字符,我尝试像这样做:

$slug = ereg_replace('\p{InArabic}', '', $string);

但它没有去除非字母数字字符!我还尝试了this answer,但也不起作用,它总是返回“0”!!
$slug = preg_replace('/[^\x{0600}-\x{06FF}A-Za-z0-9-]/u','', $string);

希望有人能够帮助我。

1
ereg_replace已被弃用。使用preg_replace的正则表达式应该可以工作。您能提供一些它无法工作的示例字符串吗? - Toto
preg_last_error() 的输出是什么?这段代码片段可以正常工作。 - Burhan Khalid
谢谢M42,有了“xdazz”的答案帮助我解决了问题,谢谢大家。 - Waleed Asender
1个回答

11

请尝试以下方法:

$slug = preg_replace('/[^\p{Arabic}\da-z-]/ui', '', $string);

嘿,这个函数也会从字符串中删除空格,如何保留字符串之间的空格呢..? - s4suryapal
1
@s4suryapal 在它后面加上空格。 - xdazz
这个正则表达式在处理大数据集时会导致错误:分段错误(核心已转储) - Riajul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接