Javascript + Regex = Rien à redire erreur?
Je suis nouveau sur les Regex et je suis en train de travailler dans l'un de mes nouveaux projets pour voir si je peux l'apprendre et de l'ajouter à ma repitoire de compétences. Cependant, je suis heurter à un écueil ici.
Je suis en train de voir si l'entrée de l'utilisateur est illégale caractères à l'aide de la .search
fonction de la manière suivante:
if (name.search("[\[\]\?\*\+\|\{\}\\\(\)\@\.\n\r]") != -1) {
...
}
Cependant, lorsque j'essaie d'exécuter la fonction de cette ligne est contenue, elle déclenche l'erreur suivante a pour ligne:
Uncaught SyntaxError: Invalid regular expression: /[[]?*+|{}\()@.
]/: Nothing to repeat
Je ne peux pas pour la vie de me voir quel est le problème avec mon code. Quelqu'un peut me pointer dans la bonne direction?
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de doubler les barres obliques inverses utilisé pour échapper à l'expression régulière de caractères spéciaux. Cependant, comme @Bohème, la plupart de ces barres obliques inverses ne sont pas nécessaires. Malheureusement, sa réponse souffre du même problème que le vôtre. Ce que vous voulez vraiment est:
La barre oblique inverse est interprétée par le code qui lit la chaîne, plutôt que de passé à l'expression régulière de l'analyseur. Vous souhaitez:
Note le quadruplé barre oblique inverse. C'est certainement nécessaire. La chaîne passée à l'expression régulière compilateur est alors identique à @Bohème de la chaîne, et fonctionne correctement.
Construction de @Bohème, je pense que l'approche la plus simple serait d'utiliser une regex littérale, par exemple:
Regex littéraux sont bien car vous n'avez pas à s'échapper le caractère d'échappement, et certains IDE volonté de mettre en évidence non valide regex (très utile pour moi, comme je ne cesse de les visser en place).
D'abord, dans une classe de caractères
[...]
plus personnages n'ont pas besoin de s'échapper, ils sont juste des littéraux.Donc, votre regex doit être:
Cette compile pour moi.