Règles pour la correspondance de nombres dans les mots surveillés

Comme indiqué dans la figure ci-dessous, les mots correspondants sont « Test », « 123 » et « 测试 » (qui signifie « Test » en chinois simplifié).

Lorsqu’une correspondance est réussie, tout nombre précédant immédiatement le mot correspondant sera inclus dans le résultat de la correspondance, et cela s’applique même aux caractères Unicode.
Les nombres qui suivent immédiatement le mot correspondant ne présentent pas ce comportement ;
Cela affecte également la correspondance des nombres, y compris les cas où les chaînes ne contiennent que des lettres anglaises et des chiffres. Par exemple, « Test123 » ne peut correspondre qu’à « Test » mais ne peut pas correspondre à « 123 » ou à « Test123 » (lui-même).

Je suis peut-être un peu à la traîne — quel type de règle de correspondance est-ce ? Quelqu’un pourrait-il me l’expliquer ? :melting_face:

1 « J'aime »

Il semble s’agir d’un bug potentiel dans les expressions régulières, qui sont toujours un peu délicates à démêler. @zogstrip, peut-être pouvez-vous y jeter un œil puisque vous avez travaillé dans ce domaine récemment (bien que cela semble exister depuis un certain temps).

Voici ma compréhension…

Lorsque nous vérifions les mots, il y a 3 segments qui doivent correspondre : le début, le mot, la fin. Nous avons défini le début et la fin comme des caractères non alphabétiques… ceux-ci peuvent être de la ponctuation, des espaces, OU des chiffres. Ce sont les chiffres qui faussent la correspondance ici. L’intention est de pouvoir détecter les mots même s’il y a de la ponctuation ou autre avant/après le mot.

Ainsi, l’expression régulière voit 123Test, trouve Test, regarde avant et trouve 3 et cela correspond à un « non-lettre », puis regarde après et trouve la fin du mot. Elle correspond donc à 3Test.

Je pense que nous devons vérifier les caractères non alphabétiques ET non numériques dans les segments de début/fin pour éviter cela ? Je ne sais pas s’il y a une raison pour laquelle nous n’avons pas inclus les chiffres ou si c’est juste un oubli.

2 « J'aime »

Peut-être que ce sujet doit être déplacé vers la catégorie Bug ?

1 « J'aime »

Ceci devrait corriger le problème pour de bon cette fois. Nous avions eu une certaine incohérence entre la version Ruby et la version JS des expressions régulières utilisées, mais cela n’est plus nécessaire.

3 « J'aime »