2013-04-11 7 views
8

Sto convalidando il testo inserito da un utente in modo che accetti solo lettere ma non numeri. finora il mio codice funziona bene quando digito un numero (ad esempio 56), mi avverte che devo digitare solo lettere e quando digito le lettere non restituisce nulla (come dovrebbe fare). Il mio problema è che lo accetta quando inizio digitando lettere seguite da numeri, ad es. (S45). quello che fa è accettare la prima lettera ma non l'intera stringa. Ne ho bisogno per accettare l'intera stringa.Python- come usare re per abbinare un'intera stringa

def letterCheck(aString): 
    if len(aString) > 0: 
     if re.match("[a-zA-Z]", aString) != None: 
      return "" 
    return "Enter letters only" 
+0

Bene avete tornare vuoto, e provare l'aggiunta di '' + alla fine della vostra espressione regolare. – squiguy

+0

no, la parte di ritorno va bene. è destinato a non restituire nulla se supera il test di convalida. – Thomas

+2

Perché non stai usando semplicemente 'aString.isalpha()'? – kindall

risposta

31

ancorano al di inizio e fine, e abbinare uno o più caratteri:

if re.match("^[a-zA-Z]+$", aString): 

Qui ^ ancore all'inizio della stringa, $ fino alla fine e + ti assicura di abbinare 1 o più caratteri.

Sarebbe meglio usare solo str.isalpha(). Non è necessario raggiungere il pesante martello dell'espressione regolare qui:

+3

Ti serve questo: '^' con re.match? Non è implicito? – Medorator

+2

@buffer: sì, è implicito; Preferisco un'ancora esplicita, tuttavia, dato che è assolutamente necessario il '$', e troppe persone inciampano sulla differenza tra 're.search()' e 're.match()'. –

+0

@MartijnPieters: questo è un buon suggerimento. Non potrei dedurre dalla documentazione se ci può essere qualche effetto collaterale di mettere '^' con 're.match' – Medorator

4

uso confini della tua regex + stringa grezzo per codificare l'espressione regolare, in questo modo:

r"^[a-zA-Z]+$" 
3

Si potrebbe considerare l'utilizzo di isalpha() sulla stringa. Restituisce vero se la stringa non contiene nient'altro che caratteri alfabetici, altrimenti falso.

if aString.isalpha(): 
    do something 
else: 
    handle input error 
+0

Una bella proprietà di 'isalpha()' per questa applicazione è che restituisce 'False' per le stringhe vuote, quindi il test separato per quello non è più necessario. – kindall

+0

grazie a tutti per le vostre risposte veloci, mi hanno aiutato a risolvere questo problema. – Thomas

0

se cercate scritti abbastanza Pythonic, andare per isalpha e isdecimal:

str = u"23443434"; 
print str.isdecimal(); 
Problemi correlati