web-dev-qa-db-fra.com

Limiter Python chaînes d'entrée à certains caractères et longueurs

Je viens de commencer à apprendre mon premier vrai langage de programmation, Python. Je voudrais savoir comment contraindre la saisie utilisateur dans un raw_input à certains caractères et à une certaine longueur. Par exemple, j'aimerais afficher un message d'erreur si l'utilisateur entre une chaîne qui contient autre chose que les lettres a-z, et j'aimerais en afficher un si l'utilisateur entre plus de 15 caractères.

Le premier semble être quelque chose que je pourrais faire avec des expressions régulières, que je connais un peu parce que je les ai utilisées dans des choses Javascript, mais je ne sais pas comment les utiliser en Python. Le deuxième, je ne sais pas trop comment l'aborder. Quelqu'un peut-il aider?

14
kidosu

Question 1: Restreindre à certains caractères

Vous avez raison, c'est facile à résoudre avec expressions régulières :

import re

input_str = raw_input("Please provide some info: ")
if not re.match("^[a-z]*$", input_str):
    print "Error! Only letters a-z allowed!"
    sys.exit()

Question 2: restreindre à une certaine longueur

Comme Tim l'a mentionné correctement, vous pouvez le faire en adaptant l'expression régulière dans le premier exemple pour n'autoriser qu'un certain nombre de lettres. Vous pouvez également vérifier manuellement la longueur comme ceci:

input_str = raw_input("Please provide some info: ")
if len(input_str) > 15:
    print "Error! Only 15 characters allowed!"
    sys.exit()

Ou les deux en un:

import re

input_str = raw_input("Please provide some info: ")
if not re.match("^[a-z]*$", input_str):
    print "Error! Only letters a-z allowed!"
    sys.exit()
Elif len(input_str) > 15:
    print "Error! Only 15 characters allowed!"
    sys.exit()

print "Your input was:", input_str
15
Niklas B.

Les expressions régulières peuvent également limiter le nombre de caractères.

r = re.compile("^[a-z]{1,15}$")

vous donne une expression régulière qui ne correspond que si l'entrée est entièrement en minuscules ASCII lettres et 1 à 15 caractères de long.

13
Tim Pietzcker
if any( [ i>'z' or i<'a' for i in raw_input]):
    print "Error: Contains illegal characters"
Elif len(raw_input)>15:
    print "Very long string"
0
ElKamina