Reputation: 992
I'd like to remove all numbers from a string [0-9]. I wrote this code that is working:
$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
I'd like to find a more elegant solution: 1 line code (IMO write nice code is important).
The other code I found in stackoverflow also remove the Diacritics (á,ñ,ž...).
Upvotes: 72
Views: 147509
Reputation: 4380
Use Predefined Character Ranges also known as Character Classes:
echo $words= preg_replace('/[[:digit:]]/','', $words);
Upvotes: 7
Reputation: 23
Alternatively, you can do this:
$words = trim($words, " 1..9");
Upvotes: -1
Reputation: 14492
For Western Arabic numbers (0-9):
$words = preg_replace('/[0-9]+/', '', $words);
For all numerals including Western Arabic (e.g. Indian):
$words = '१३३७';
$words = preg_replace('/\d+/u', '', $words);
var_dump($words); // string(0) ""
\d+
matches multiple numerals./u
enables unicode string treatment. This modifier is important, otherwise the numerals would not match.Upvotes: 185
Reputation: 37905
Use some regex like [0-9]
or \d
:
$words = preg_replace('/\d+/', '', $words );
You might want to read the preg_replace() documentation as this is directly shown there.
Upvotes: 6
Reputation: 152216
Try with regex \d
:
$words = preg_replace('/\d/', '', $words );
\d
is an equivalent for [0-9]
which is an equivalent for numbers range from 0
to 9
.
Upvotes: 59