2017-02-26 6 views
1

Je travaille sur un petit projet, j'ai besoin d'évaluer une chaîne de seulement quatre caractères [je peux écrire un peu de RE, mais celui-ci m'a eu.]. Je dois écrire une expression régulière qui doit correspondre à 1 upper case mot, 1 lower case mot, one digit et un caractère aléatoire comme [a-zA-Z0-9]. l'ordre n'a pas d'importance dans la chaîne.Expression régulière pour évaluer la chaîne de mot de passe

Voici quelques chaînes de caractères qui devraient passer ou échouer.

Valid words: Abn1, GGh3, 89jK…. 

Invalid words: abcd, 112a, abDb, 2Ab, 4, AA, …. 

toute aide ou en tête appréciée.

+0

Cela n'est pas clair, cela signifie-t-il que les chaînes doivent contenir au moins 4 caractères? Mots ou * cordes *? Essayez ['\ b (? = [Az \ d] * [AZ]) (? = [A-zA-Z] * \ d) (? = [AZ \ d] * [az]) [a-zA- Z0-9] {4,} '] (https://regex101.com/r/ej2o4T/1). Ou, si la chaîne entière doit correspondre, ['^ (? =. * [AZ]) (? =. * \ D) (? =. * [Az]) [a-zA-Z0-9] {4, } $ '] (https://regex101.com/r/C1HkYT/1). –

+0

@ WiktorStribiżew, la chaîne ne doit contenir que 4 caractères, ni plus ni moins – Mubin

+0

@downvoter, vos bonnes pensées sur celui-ci? – Mubin

Répondre

3

lookaheads Muultiple est votre réponse

\b(?=[a-zA-Z0-9]*[a-z])(?=[a-zA-Z0-9]*[A-Z])(?=[a-zA-Z0-9]*[0-9])[a-zA-Z0-9]{4}\b 

(?=[a-zA-Z0-9]*[a-z]) # string contains any lowercase character 
(?=[a-zA-Z0-9]*[A-Z]) # string contains any uppercase character 
(?=[a-zA-Z0-9]*[0-9]) # string contains any digit 
[a-zA-Z0-9]{4}   # 4 characters, since the 4th is the type that can fit in any of the three 

Si la chaîne est d'une seule entrée (comme une zone de texte 4 caractères, vous devez devez remplacer les limites de mots (\b) avec ^ et $, comme

^(?=[a-zA-Z0-9]*[a-z])(?=[a-zA-Z0-9]*[A-Z])(?=[a-zA-Z0-9]*[0-9])[a-zA-Z0-9]{4}$ 
+0

J'ai mis cette RE à l'environnement, et cela ne semble pas fonctionner. http://regexr.com/3fcvp – Mubin

+0

@Mubin La version à entrée unique est la suivante: si vous aviez une zone de texte dans laquelle vous vouliez que quelqu'un entre seulement ces 4 caractères, la version supérieure détecte ces motifs dans les textes plus volumineux. Cela dépend de votre intention. –

+0

qui a fonctionné, merci – Mubin

-1

simple RegExp est pas une bonne façon de le faire.

La meilleure solution juste chec k vos règles dans la boucle des caractères itérés.

En option, vous pouvez écrire 3 simples expressions rationnelles pour chaque règle, au lieu d'une grande expression rationnelle.

+0

Une expression régulière est une solution idéale pour cela réellement. L'expression est assez simple comme les expressions vont. –

+0

Je préfère garder chaque test dans une fonction séparée - pour pouvoir modifier chaque test séparément plus tard –

+0

Mais j'avais besoin d'un seul 'RE' pour y parvenir et la réponse de @ cfqueryparam a fonctionné pour moi – Mubin