66

我想从字符串 [0-9] 中删除所有数字。我写了这个有效的代码:

$words = preg_replace('/0/', '', $words ); // remove numbers
$words = preg_replace('/1/', '', $words ); // remove numbers
$words = preg_replace('/2/', '', $words ); // remove numbers
$words = preg_replace('/3/', '', $words ); // remove numbers
$words = preg_replace('/4/', '', $words ); // remove numbers
$words = preg_replace('/5/', '', $words ); // remove numbers
$words = preg_replace('/6/', '', $words ); // remove numbers
$words = preg_replace('/7/', '', $words ); // remove numbers
$words = preg_replace('/8/', '', $words ); // remove numbers
$words = preg_replace('/9/', '', $words ); // remove numbers

我想找到一个更优雅的解决方案:1 行代码(IMO 编写好的代码很重要)。

我在 stackoverflow 中找到的其他代码也删除了变音符号 (á,ñ,ž...)。

4

6 回答 6

168

对于西方阿拉伯数字 (0-9):

$words = preg_replace('/[0-9]+/', '', $words);

对于所有数字,包括西方阿拉伯语(例如Indian):

$words = '१३३७';
$words = preg_replace('/\d+/u', '', $words);
var_dump($words); // string(0) ""
  • \d+匹配多个数字。
  • 修饰符/u启用 unicode 字符串处理。此修饰符很重要,否则数字将不匹配。
于 2013-01-09T13:22:03.343 回答
54

尝试使用正则表达式\d

$words = preg_replace('/\d/', '', $words );

\d是一个等价物,[0-9]它是数字范围从0到的等价物9

于 2013-01-09T13:22:11.753 回答
6

使用一些正则表达式,例如[0-9]or \d

$words = preg_replace('/\d+/', '', $words );

您可能需要阅读preg_replace() 文档,因为它直接显示在那里。

于 2013-01-09T13:23:44.783 回答
2

使用预定义的字符范围

echo $words= preg_replace('/[[:digit:]]/','', $words);

于 2016-08-12T06:00:17.123 回答
0

正则表达式

   $words = preg_replace('#[0-9 ]*#', '', $words);
于 2015-04-16T09:46:52.860 回答
0

或者,您可以这样做:

$words = trim($words, " 1..9");
于 2021-07-19T22:53:35.640 回答