如何从字符串中删除所有数字?

时间:2013-01-09 13:21:20

标签: php regex

我想删除字符串[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中找到的其他代码也删除了Diacritics(á,ñ,ž......)。

6 个答案:

答案 0 :(得分:114)

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

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

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

$words = '१३३७';
$words = preg_replace('/\d+/u', '', $words);
var_dump($words); // string(0) ""
  • \d+匹配多个数字。
  • 修饰符/u启用unicode字符串处理。此修饰符很重要,否则数字将不匹配。

答案 1 :(得分:45)

尝试使用正则表达式\d

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

\d[0-9]的等效词,相当于09的数字。

答案 2 :(得分:5)

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

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

您可能需要阅读preg_replace() documentation,因为这会直接显示在那里。

答案 3 :(得分:1)

使用预定义的字符范围

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

答案 4 :(得分:1)

或者,您可以这样做:

$words = trim($words, " 1..9");

答案 5 :(得分:0)

正则表达式

   $words = preg_replace('#[0-9 ]*#', '', $words);