"PCRE est l'abréviation de "Perl-Compatible Regular Expressions", mais cela ne signifie pas que toutes les fonctionnalités disponibles dans les regex de Perl5 sont disponibles dans PCRE. Le manuel PHP a une page sur PCRE : Différences avec Perl qui comprend une déclaration similaire à celle du message d'erreur :
Les séquences d'échappement Perl suivantes ne sont pas prises en charge : \l , \u , \L , \U. En fait, ils sont mis en œuvre par le traitement général des chaînes de caractères de Perl et ne font pas partie de son moteur de recherche de motifs.
PHP (depuis 7.0) dispose de le soutien à \u
échappements dans une chaîne de caractères , si elle est entre guillemets donc "\u{0590}"
représenterait ce caractère mais pourrait ne pas avoir l'effet désiré à l'intérieur de la regex En effet, vous devez indiquer à la classe de caractères que vous souhaitez une plage de points de code Unicode, et non un ensemble de valeurs 8 bits possibles.
Ce que vous voulez en fait dans ce cas est la notation PCRE pour les points de code Unicode qui est décrit sous Séquences d'évasion :
En mode UTF-8, " \x {...}" est autorisé, où le contenu des accolades est une chaîne de chiffres hexadécimaux. Elle est interprétée comme un caractère UTF-8 dont le numéro de code est le nombre hexadécimal donné.
La mention du "mode UTF-8" fait référence à le site u
modificateur de motif :
Ce modificateur active des fonctionnalités supplémentaires de PCRE qui sont incompatibles avec Perl. Les chaînes de motifs et de sujets sont traitées en UTF-8. Un sujet invalide fera en sorte que la fonction preg_* ne correspondra à rien ; un motif invalide déclenchera une erreur de niveau E_WARNING.
Donc je crois que votre schéma de :
'/^[\u0590-\u05fe ]+$/'
devrait être changé en :
'/^[\x{0590}-\x{05fe} ]+$/u'
Notez que, comme le manuel de l u
implique, la chaîne sujet doit être encodé en UTF-8 pour que cela fonctionne ; il n'y a pas de support pour UTF-16 ou tout autre encodage Unicode.