2012-05-17 8 views
11

Come Python? Sto provando a controllare se ogni carattere in una stringa è alfanumerico o no?Non ha Ruby isalpha?

+0

Ho provato su Google ma non ho trovato nulla. Quindi volevo solo confermare con SO. – sivabudh

+1

È possibile utilizzare espressioni regolari per questo. –

+0

Ok, grazie Sergio. – sivabudh

risposta

19

C'è una classe di carattere speciale per questo:

char.match(/^[[:alpha:]]$/) 

Questo dovrebbe corrispondere a un singolo carattere alfabetico. Sembra funzionare anche per UTF-8.

Per testare un'intera stringa:

string.match(/^[[:alpha:]]+$/) 

Tenete a mente questo non tiene conto per gli spazi o segni di punteggiatura.

+0

Grazie. Credo che in Ruby, devi ricorrere all'utilizzo di RegEx. – sivabudh

+0

Si può sempre aggiungere un metodo 'String # isalpha? 'Se si preferisce quello stile come suggerisce Sergio. – tadman

+1

Non so come sia la risposta corretta. [[: alpha:]] è per alfabeti mentre l'OP ha richiesto un controllo per caratteri alfanumerici. –

17

È possibile eseguire il rollover :) Sostituire alnum con alpha se si desidera associare solo lettere, senza numeri.

class String 
    def alpha? 
    !!match(/^[[:alnum:]]+$/) 
    end 
end 

'asdf234'.alpha? # => true 
'[email protected]#$'.alpha? # => false 
+2

O essere più rubino: '#alpha?'. – d11wtq

+0

@ d11wtq: assolutamente. Grazie :) –

+1

'! Self.match (/ [^ [: alnum:]] /)' è più semplice. – steenslag

6

La funzione python funziona solo per caratteri ASCII; il [[:: alnum]] regex farebbe cose come "tëst" .alpha? => vero. match/\w/ partite sottolinea, in modo che lascia

def isalpha(str) 
    !str.match(/[^A-Za-z]/) 
end 

per riprodurre il problema Python.

+0

python 'isalpha' non supporta la stringa con le cifre – Anwar

+0

Restituisce' true' per la stringa vuota ma dovrebbe restituire 'false'. – ma11hew28

Problemi correlati