2017-03-09 8 views
2

Mon mot de passe doit contenir au moins un caractère spécial de la liste ci-dessous.Expression régulière mal formée dans ColdFusion

@ % +/! # $^? : , { } () [ ] ~ - _.`

J'ai essayé dans ColdFusion en utilisant le code ci-dessous, mais il est de lancer erreur du mal à dire:

expression régulière malformée « @% +/# $^?: , {}() [] ~ `-_ »

<cfif REFind("@%+/!##$^?:,{}()[]~`-_",arguments.myPassword) IS 0> 
// some business logic 
</cfif> 

Quelqu'un pourrait-il me aider à résoudre ce problème?

+0

Essayez ' "[@% +/# $ ^:? {}() [\\] ~ \ '_.-]" ' –

Répondre

2

Votre expression régulière est mal formée car [`-_]forms an invalid range.

Utilisez

<cfif REFind("[@%+/!##$^?:,{}()[\\]~`_.-]",arguments.myPassword) IS 0> 

Ici, notez que

  • un [...] est une classe de caractères qui correspond à 1 caractère forment les ensembles/symboles définis dans la classe
  • - est à la fin de la classe de caractères et est donc traitée comme un littéral -
  • ] la classe ide caractère DOIT être échappé avec un littéral \
+0

la erreur est parti quand j'ai donné cette regex. Mais il me donne la réponse correcte quand je donne l'expression rationnelle comme [@% + /! ## $ ^?:, {}() \ [\] ~ '_-] .... Y at-il une différence? – user3742125

+0

Est-ce que le ']' dans la classe de caractères est échappé? Il doit être échappé. Quelle est la chaîne que vous testez? Notez que vous n'avez pas besoin de doubler le symbole '# ', il suffit d'en utiliser un seul. –

+0

# doit être doublé sinon le compilateur CFML lancera l'erreur .. Test sttring: 2Password ## – user3742125