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

Gag*_*ign 51 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
Run Code Online (Sandbox Code Playgroud)

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

我在stackoverflow中找到的其他代码也删除了Diacritics(á,ñ,ž...).

Dan*_*Lee 125

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

$words = preg_replace('/[0-9]+/', '', $words);
Run Code Online (Sandbox Code Playgroud)

所有数字包括西方阿拉伯语(例如印度语):

$words = '????';
$words = preg_replace('/\d+/u', '', $words);
var_dump($words); // string(0) ""
Run Code Online (Sandbox Code Playgroud)
  • \d+ 匹配多个数字.
  • 修饰符/u启用unicode字符串处理.此修饰符很重要,否则数字将不匹配.


hsz*_*hsz 46

试试正则表达式\d:

$words = preg_replace('/\d/', '', $words );
Run Code Online (Sandbox Code Playgroud)

\d是一个等价物,[0-9]对应于数字范围从09.

  • 您需要知道的是\ d是UTF-8中的所有数字,不仅是0123456789,还有其他语言的数字. (5认同)
  • 这比接受的解决方案更聪明,更短,不是吗? (4认同)

Nav*_*nDA 7

使用预定义的字符范围也称为字符类

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

Run Code Online (Sandbox Code Playgroud)


Veg*_*ger 5

使用一些正则表达式[0-9]\d:

$words = preg_replace('/\d+/', '', $words );
Run Code Online (Sandbox Code Playgroud)

您可能希望阅读preg_replace()文档,因为它直接显示在那里.