2017-01-12 1 views
0

Supposons que je doive faire correspondre certains motifs dans un texte d'entrée. Que le modèle soitMotifs de texte assortis Contraintes de relaxation avec des substitutions de caractères admises

password 

Je veux correspondre toutes les entrées qui correspondent à mon modèle, mais admettant une substitution de jeu de caractères prédéfini, dire:

1. a -> @ 
2. e -> 3 
3. o -> 0 
4. i -> ! 
5. s -> $ 

Rester mon exemple, je voudrais toutes les entrées suivantes doivent être mises en correspondance avec mon modèle password: [email protected], [email protected]$sword, pa$$w0rd et ainsi de suite.

Ma question principale est comment le faire, mais rétrécissant vers le bas:

  1. est regex l'instrument droit de le faire?
  2. Comment puis-je définir un ensemble de substitutions admises que la correspondance de regex devrait prendre en compte?
  3. est-ce une question assez commune que j'ai oubliée?
  4. ce qui est une manière concise (c'est-à-dire en définissant simplement une fois les substitutions sans avoir à les répéter pour chaque modèle admis) pour atteindre cet objectif pour plusieurs modèles?

Notez que password était juste un commode mot contenant plusieurs remplacements possibles; mon problème ne veut pas du tout traiter avec la sécurité.

Répondre

1

Si la substitution est toujours un seul caractère (ou un caractère unique entre plusieurs choix), vous pouvez utiliser une classe de caractères:

p[[email protected]][s$][s$]w[o0]rd 

S'il peut y avoir plusieurs caractères, vous devez utiliser des alternances:

pass(w|\/\/)ord 

Vous pouvez définir une carte/dictionnaire des caractères originaux à des substitutions possibles dans la langue de votre choix et l'utiliser pour transformer une entrée en forme:

1. a -> [[email protected]] 
2. e -> [e3] 
3. o -> [o0] 
4. i -> [i!] 
5. s -> [s$] 
6. w -> (w|\/\/) 

password -> p[[email protected]][s$][s$](w|\/\/)[o0]rd 

Je pense que regex peut être un bon outil pour cela, mais il existe déjà des outils qui vont tester la force d'un mot de passe si c'est ce que vous cherchez. Ils représentent des substitutions communes.

Peut-être que l'utilisation de Levenshtein's distance vous serait également utile si vous voulez interdire aux utilisateurs de réutiliser un mot de passe de fermeture.

+0

Merci beaucoup! Je viens de réaliser que j'ai oublié une question clé, que maintenant j'ai ajouté à la question 4. Pouvez-vous jeter un coup d'œil s'il vous plaît? –

+0

@PaoloM juste édité en. Est-ce suffisamment de détails? – Aaron

+0

Oui, et ce n'était pas si difficile à comprendre, maintenant que tu me fais penser à ça ...: D merci –