user3134277 user3134277 - 20 days ago 5
PHP Question

My regex doesn't recognize arabic character

I want to stop repeating of a character more than 3 times, to transform it to juste 3 times.

Example : aaaaaaaaaall => aaall

So, I did it with english character, and it worked :

$patternReplace = '/(.)\1{3,}/i';
$chaine = preg_replace($patternReplace, "$1$1$1", $chaine, -1 );


but it doesnt work for arabic character, like :

أأأأأأأأأأأأأأأأأأأأأأأأأأأأ


thanx for help

Answer

Use the u modifier:

$patternReplace = '/(.)\1{3,}/iu';
$chaine = preg_replace($patternReplace, "$1$1$1", $chaine, -1 );

Docs from PHP.net:

u (PCRE_UTF8)
This modifier turns on additional functionality of PCRE that is incompatible with Perl. Pattern and subject strings are treated as UTF-8. This modifier is available from PHP 4.1.0 or greater on Unix and from PHP 4.2.3 on win32. UTF-8 validity of the pattern and the subject is checked since PHP 4.3.5. An invalid subject will cause the preg_* function to match nothing; an invalid pattern will trigger an error of level E_WARNING. Five and six octet UTF-8 sequences are regarded as invalid since PHP 5.3.4 (resp. PCRE 7.3 2007-08-28); formerly those have been regarded as valid UTF-8.

Comments