10 votes

Comment vérifier qu'une chaîne ne contient que des caractères "a-z", "A-Z" et "0-9" ?

J'importe une chaîne de caractères et j'essaie de vérifier si le texte ne contient que des "a-z", "A-Z" et "0-9".

Mais je n'obtiens qu'une entrée et le succès ne s'imprime pas lorsque j'entre des lettres et des chiffres.

import string
text=input("Enter: ")
correct = string.ascii_letters + string.digits
if text in correct:
    print("Success")

18voto

vs97 Points 3660

Vous pouvez utiliser une expression rationnelle pour cela, par exemple en vérifiant la chaîne de caractères par rapport au modèle suivant :

import re
pattern = re.compile("[A-Za-z0-9]+")
pattern.fullmatch(string)

Explication :

[A-Za-z0-9] correspond à un caractère dans la plage A-Z, a-z et 0-9, donc des lettres et des chiffres.

+ signifie qu'il doit correspondre à un ou plusieurs éléments du jeton qui le précède.

En re.fullmatch() permet de vérifier si la chaîne entière correspond au modèle d'expression régulière. Retourne un objet match correspondant si une correspondance a été trouvée, sinon retourne None si la chaîne ne correspond pas au modèle.

Tous ensemble :

import re

if __name__ == '__main__':
    string = "YourString123"
    pattern = re.compile("[A-Za-z0-9]+")

    # if found match (entire string matches pattern)
    if pattern.fullmatch(string) is not None:
        print("Found match: " + string)
    else:
        # if not found match
        print("No match")

10voto

Jaba Points 3963

Il suffit d'utiliser str.isalnum()

>>> '123AbC'.isalnum()
True
>>> '1&A'.isalnum()
False

Référencement des docs :

Retourne vrai si tous les caractères de la chaîne sont ar est au moins un caractère, false sinon. Un caractère c i si l'une des réponses suivantes est obtenue True : c.isalpha() , c.isdecimal() , c.isdigit() ou c.isnumeric() .

Si vous ne voulez pas str.isdigit() o str.isnumeric() à vérifier, ce qui peut permettre l'utilisation de points décimaux dans les chiffres, utilisez simplement str.isnumeric() y str.isalpha() :

>>> all(c.isnumeric() or c.isalpha() for c in '123AbC')
True
>>> all(c.isnumeric() or c.isalpha() for c in '1&A')
False

1voto

hmn Falahi Points 244

Vous devez comparer chaque lettre du texte entrant séparément.

import string
text = input("Enter: ")
correct = string.ascii_letters + string.digits
status = True
for char in text:
    if char not in correct:
        status = False
if status:
    print('Correct')
else:
    print('InCorrect')

0voto

Jmonsky Points 1456

Vous testez si la chaîne entière est dans la chaîne. 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'

Disons que l'entrée est 'testInput'

Vous vérifiez si 'testInput' est dans la chaîne 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ce qui n'est pas le cas.

Vous devez vérifier chaque personnage individuellement

Vous pouvez le faire avec une fonction pour faciliter l'utilisation.

import string
def validCharacters(text):
    correct = string.ascii_letters + string.digits
    for character in text:
         if character not in correct:
              return False

    return True

text = input("Enter: ")
if validCharacters(text):
     print("Correct")
else:
     print("Incorrect")

0voto

TomNash Points 728

Nous pouvons supprimer tous les caractères qui ne sont pas A-Z, a-z ou 0-9, puis vérifier la longueur de la chaîne restante. Si elle est supérieure à 0, cela signifie qu'il existe des caractères autres que ceux mentionnés ci-dessus :

import re
text = input("Enter: ")
result = re.sub("[A-Za-z0-9]", '', text)
if len(result) == 0:
    print("Success")
else:
    print("Failure")

Résultat :

abcDEF123 -> Success
hello! -> Failure

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