Question

Hi i'm actually trying replacing all the NON-alphanumeric chars from a string like this:

mb_ereg_replace('/[^a-z0-9\s]+/i','-',$string);

first problem is it doesn't replaces chars like "." from the string.

Second i would like to add multybite support for all users languages to this method.

How can i do that?

Any help appriciated, thanks a lot.

Was it helpful?

Solution

Try the following:

preg_replace('/[^\p{L}0-9\s]+/u', '-', $string);

When the u flag is used on a regular expression, \p{L} (and \p{Letter}) matches any character in any of the Unicode letter categories.

OTHER TIPS

It should replace . with -, you're probably mixing up your data in the first place.

As for the multi-byte support, add the u modifier and look into PCRE properties, namely \p{Letter}:

$replaced = preg_replace('~[^0-9\p{Letter}]+~iu', '-', $string);

The shortest way is:

$result = preg_replace('~\P{Xan}++~u', '-', $string);

\p{Xan} contains numbers and letters in all languages, thus \P{Xan} contains all that is not a letter or a number.

This expression does replace dots. For multibyte use u modifier (UTF-8).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top