2009-06-12 5 views
4

Je pense que c'est simple mais je suis trop stupide pour écrire un. Quelqu'un peut-il me donner une expression régulière qui vérifie une chaîne donnée pour au moins 1 lettre et au moins 1 numéro?Expression régulière avec au moins 1 lettre et 1 chiffre

s'il vous plaît aussi donner quelques explications.

+0

Vous devriez indiquer dans quel langage/framework vous travaillez, car la syntaxe regex peut varier. Est-ce .NET, Perl, Python, ...? – AakashM

+0

Salut, J'utilise .net framework (C#) – Eros

Répondre

6

REs ne sont pas bonnes pour des choses très compliquées comme plusieurs commandes, mais ce simple devrait être représentable avec:

[A-Za-z].*[0-9]|[0-9].*[A-Za-z] 
+0

cette expression peut être modifiée pour valider cette: 1 $$ aawdEEQ! – Eros

+0

euh, c'est vrai ... – annakata

+0

oups, oui, merci beaucoup :) – Eros

1

Ce serait évidemment beaucoup plus facile avec deux chèques, l'un pour la chaîne, l'un pour le nombre.

Quelque chose comme ce qui suit pourrait fonctionner si, car si vous avez un numéro et une lettre, vous devez, par définition, un numéro correspondant à une lettre (ou vice versa):

([A-Za-z][0-9]|[0-9][A-Za-z]) 

Mise à jour: enlevé un '|' fallacieux. Notez que ce qui précède suppose qu'aucun autre caractère n'est valide, ce qui, je suppose, pourrait ne pas être acceptable. Voir l'autre réponse pour une meilleure solution si la ponctuation est autorisée.

+1

Je ne vous ai pas downvote (pas mon style) mais il me semble que votre RE va correspondre aux chaînes "0", "A" et ainsi de suite, même si elles Je n'ai pas de lettre et de numéro. Il se peut que votre deuxième "|" est là par accident mais même alors je pense que votre hypothèse est fausse - la description semble indiquer que "0, A" serait valide et il n'a pas un nombre à côté d'une lettre. – paxdiablo

+0

Merci - spurious '|' là qui n'était pas mon intention originale. Cela m'énerve quand les gens déprécient sans dire pourquoi, je vais juste supposer que c'était à cause de ce que tu as dit :) – samjudson

+0

Oui, c'est pourquoi j'ai downvoted. – CiscoIPPhone

2

Une meilleure façon serait de vérifier séparément pour cela, en utilisant 2 regex: /[a-z]/i et /\d/ . Sinon, en supposant que vous souhaitez appliquer la règle de sécurité pour un mot de passe, divisez-le (par exemple en PHP avec str_split) et comptez le nombre d'occurrences de chaque type de caractère, ce qui vous donnera une estimation de la force du mot de passe. vous adaptez vos règles.

Performance est pas un problème si ce changement de mot de passe, vous ne le faites pas sur 20K piqûres ...

1

Quelqu'un a déjà répondu, mais vous trouverez peut-être ce utile aussi ...

Son un générateur d'expressions régulières visuelles écrit en .NET. C'est assez cool, vous pouvez voir en temps réel ce que vous obtiendrez. Vérifiez-le here.

:)

1

Je ne pense pas que cela importe beaucoup, mais je l'ai fait de cette façon.

([A-Za-z])+([0-9])+|([0-9])+([A-Za-z])+
+1

Cette réponse a besoin d'amour. –