2012-05-17 29 views
11

Python gibi mi? Dizede her karakterin alfanümerik olup olmadığını kontrol etmeye çalışıyorum veya değil mi?Ruby'de isalfa yok mu?

+0

Çalışmayı denedim, ancak hiçbir şey bulamadım. Bu yüzden sadece SO ile onaylamak istedim. – sivabudh

+1

Bunun için normal ifadeleri kullanabilirsiniz. –

+0

Tamam, teşekkürler Sergio. – sivabudh

cevap

19

özel karakter sınıfı Bunun için var: Tek bir alfabetik karakter eşleşmesi gerekir

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

. Ayrıca UTF-8 için çalışıyor gibi görünüyor.
string.match(/^[[:alpha:]]+$/) 

unutmayın bu boşluk veya noktalama işareti dikkate almaz:

bir bütün dize test etmek için.

+0

Teşekkürler. Ruby’de, RegEx’i kullanman gerekiyor. – sivabudh

+0

Eğer Sergio'nun önerdiği tarzı tercih ederseniz, her zaman bir 'String # isalpha?' Yöntemini ekleyebilirsiniz. – tadman

+1

Doğru cevap bu değil mi? [[: alpha:]] alfabe içindir, oysa OP alfanümerik karakterler için bir kontrol istedi. –

17

Kendi yuvarlanabilirsiniz :) Sadece harflerle eşleşmek istiyorsanız, alnum'u alpha ile değiştirin.

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

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

Ya da daha çok ruby-esque olmak için: '#alpha?'. – d11wtq

+0

@ d11wtq: kesinlikle. Teşekkürler :) –

+1

'! Self.match (/ [^ [: alnum:]] /)' daha basittir. – steenslag

6

Python işlevi yalnızca ASCII karakterleri için çalışır; [[: alnum]] ifadesi "tëst" a gibi şeyler yapardı. => doğru. O

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

Python davranışı yeniden bırakır böylece match/\w/ maçları, vurgulamaktadır.

+0

python 'isalpha' – Anwar

+0

rakamlı dizeyi desteklemiyor Bu, boş dizge için 'true' değerini döndürür, ancak 'false' değerini döndürmelidir. – ma11hew28