2 votes

Pourquoi mon regex ne fonctionne pas pour la validation des caractères ?

Voici mon (?=.*[a-z]{2}) vérifie explicitement la présence de deux petits caractères, mais n'a pas pu l'accepter.

import re
char = 'Massas23#'
if re.search(r"^(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$", char):
    print ("match")
else:
    print ("Not Match")

Ma sortie est Match et Attendu est Not Match

1voto

Emma Points 1

Peut-être,

^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$

pourrait fonctionner alors.

(?!.*[a-z]{3})

signifie que plus de trois minuscules consécutives ne sont pas autorisées.

Démo 1

Test

import re

char = 'Massas23#'

if re.search(r"^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$", char):
    print("match")
else:
    print("Not Match")

Si vous souhaitez simplifier/modifier/explorer l'expression, elle a été expliquée dans le panneau supérieur droit de la page regex101.com . Si vous le souhaitez, vous pouvez également regarder en ce lien comment il se comporterait par rapport à certains échantillons.


Circuit RegEx

jex.im visualise les expressions régulières :

enter image description here


Je suppose que nous n'essayions pas de correspondre MAsSa23# si vous souhaitez le faire,

^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{1,2})(?=.*[@#$])[\w\d@#$]{6,12}$

le ferait.

Démo 2

0voto

The fourth bird Points 40138

Vous pouvez omettre les caractères minuscules de la classe de caractères et faire correspondre exactement 2 caractères minuscules de a à z.

Vous pouvez utiliser contraste l'utilisation de classes de caractères négatives, par exemple la correspondance avec un chiffre qui n'est pas un chiffre.

^(?=.{6,12}$)(?=[^\d\s]*\d)(?=[^A-Z\s]*[A-Z])(?=[^@#$\s]*[@#$])[A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]*$
  • ^ Début de la chaîne de caractères
  • (?=.{6,12}$) Affirmer 6 - 12 caractères
  • (?=[^\d\s]*\d) Affirmer un chiffre
  • (?=[^A-Z\s]*[A-Z]) Assurer un caractère majuscule
  • (?=[^@#$\s]*[@#$]) Affirmer un caractère spécial
  • [A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]* Faites correspondre 2 minuscules de a à z
  • $ Fin de la chaîne

Démonstration de Regex

Notez que

  • [\d] ne doit pas nécessairement être entre crochets.
  • [\w\d@#$] \w correspond également à \d de sorte qu'il peut être omis de la classe de caractères

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X