Je souhaite ignorer les crochets lors de l'utilisation de javascript regex

J'utilise javascript regex pour effectuer une validation de données et spécifier les caractères que je souhaite accepter (je souhaite accepter les caractères alphanumériques, les espaces et les éléments suivants !&,'\- et peut-être quelques autres que j'ajouterai plus tard si nécessaire). Mon code est:

 var value = userInput; var pattern = /[^A-z0-9 "!&,'\-]/; if(patt.test(value) == true) then do something 

Cela fonctionne bien et exclut les lettres que je ne veux pas que l'utilisateur entre, sauf le crochet carré et les symboles du carnet. De tous les tutoriels javascript regex que j'ai lus, ils sont des caractères spéciaux – les parenthèses signifiant n'importe quel caractère entre eux et le caret dans cette instance signifient un caractère qui n'est pas entre les crochets. J'ai cherché ici et sur google pour expliquer pourquoi ces caractères sont également acceptés mais ne peuvent pas trouver une explication.

Alors, est-ce que quelqu'un peut aider, pourquoi mon entrée accepte-t-elle les crochets et le caret?

La raison en est que vous utilisez Az plutôt que A-Za-z. La gamme Ascii entre Z (0x5a) et a (0x61) comprend les crochets, le caret, le backquote et le trait de soulignement.

Votre regex n'est pas conforme à ce que vous avez dit:

Je souhaite accepter les caractères alphanumériques, les espaces et les éléments suivants! &, '\ – et peut-être un peu plus que j'ajouterai plus tard si nécessaire

Si vous souhaitez accepter uniquement ces caractères, vous devez supprimer le curseur:

 var pattern = /^[A-Za-z0-9 "!&,'\\-]+$/; 

Remarques:

  1. Az comprend également les personnages:

      [\] ^ _ ` 

    .

    Utilisez A-Za-z ou utilisez le modificateur i pour faire correspondre uniquement les alphabets:

     var pattern = /^[a-z0-9 "!&,'\\-]+$/i; 
  2. \- n'est que le personnage - , car la barre oblique inverse agira comme un caractère spécial pour échapper. Utilisez \\ pour autoriser une barre oblique inverse.

  3. ^ Et $ sont des ancrages, utilisés pour correspondre au début et à la fin de la chaîne. Cela garantit que la chaîne entière correspond à la regex.

  4. + Est utilisé après la classe de caractères pour correspondre à plus d'un caractère.


Si vous voulez dire que vous souhaitez associer des caractères autres que ceux que vous acceptez et que vous utilisez ceci pour empêcher l'utilisateur d'entrer des caractères «interdits», la première note ci-dessus décrit votre problème. Utilisez A-Za-z au lieu d' Az (la deuxième note est également pertinente).

Je ne suis pas sûr de ce que vous voulez, mais je ne pense pas que votre regexp actuel fait ce que vous pensez faire:

Il essaie de trouver un personnage n'est pas A-z0-9 "!&,'\- ( ^ signifie not ).

En outre, je ne suis même pas sûr de ce que Az correspond. C'est à la fois az ou AZ .

Donc, votre ration actuelle correspond à des chaînes comme "." Et "Hi." Mais pas "Hi"

Essayez ceci: var pattern = /[^\w"!&,'\\-]/;

Remarque: \ w comprend également _ , donc si vous voulez éviter cela, essayez

 var pattern = /[^a-z0-9"!&,'\\-]/i; 

Je pense que le problème avec votre regex est que Az est compris comme tous les caractères entre 0x41 (65) et 0x7A (122), qui incluaient les caractères [] ^ _ `qui sont entre AZ et az. (Z est 0x5A (90) et a est 0x61 (97), ce qui signifie que les caractères précédents occupent 0x5B par 0x60).