8768 sujets

Développement web côté serveur, CMS

Bonjour à tous
Pour des raisons trop longues à expliquer j’aimerais stocker des expressions régulières dans une base de données et les récupérer par un mécanisme AJAX.
Je constate que l’utilisation de protections par \ multiples, aussi bien utilisé dans JSON que dans les regex js (et aussi apparemment par MySQL) aboutit à une confusion totale et que ce que je récupère n’est pas ce que j’ai entré manuellement dans la base.
Auriez-vous constaté quelque chose de ce genre et trouvé une solution ou un contournement ?
Merci pour votre aide.
Modifié par PapyJP (01 Apr 2024 - 10:17)
Bonsoir,

Ta question n'est pas très précise.

De façon générale, il faut se souvenir que \ est souvent utilisé comme échappement, et donc par chaque couche où c'est le cas, tu dois les doubler.

JE prends un exemple bidon: admettons que tu veux stocker une regex qui teste la présence d'un double backslash suivi d'un chiffre.

La regex pourrait ressembler à:
\\\\\d

Il y a déjà une fonction d'échappement au niveau de la regex, donc on se retrouve déjà avec 4 \ pour n'en tester que 2 en réalité.

Dans la commande insert, il va falloir écrire:

insert into table (regex) values ('\\\\\\\\\\d')

pour que soit effectivement insérée la regex précédente en base.
Une fois de plus on a doublé les \

Si cette commande insert est écrite en PHP, ça peut donner:
$db->query("insert into table (regex) values ('\\\\\\\\\\\\\\\\\\\\d')");

Une fois de plus on a doublé les \ parce qu'en PHP aussi, il y a un échappement supplémentaire.
Et hop, on en est rendu à 16.

J'espère que cette explication va t'aider un peu.

ET si ce n'est pas du tout ça ton problème, il va falloir être plus précis.
Merci de ta réponse.
C’est bien ce que je craignais. En pratique il n’est donc pas évident de stocker un regex dans la BDD.
Je vais abandonner cette idée
a écrit :
C’est bien ce que je craignais. En pratique il n’est donc pas évident de stocker un regex dans la BDD.


Ca ne pose aucun problème. C'est juste quelque chose à savoir.

Après il faut aussi savoir qu'il y a quelques différences entre la syntaxe des regex en js, php, mysql, etc.
C'est un peu différent parce que l'implémentation qui est derrière n'est pas forcément toujours exactement la même.

De nouveau ce n'est pas un problème, il faut juste y être attentif.
Modérateur
Juste une idée peut-être naive pour les préserver comme je ne m'y suit jamais confronté : Est ce que se servir de urlencode et urldecode pour les enregistrer puis les utilser pourrait faire l'affaire ?