2012-05-17 27 views
11

Giống như Python? Tôi đang cố kiểm tra xem mỗi ký tự trong một chuỗi có phải là chữ số hay không?Ruby không có isalpha?

+0

Tôi đã thử googling nhưng không tìm thấy bất cứ điều gì. Vì vậy, tôi chỉ muốn xác nhận với SO. – sivabudh

+1

Bạn có thể sử dụng regexes cho việc này. –

+0

Được rồi, cảm ơn Sergio. – sivabudh

Trả lời

19

Có một lớp nhân vật đặc biệt cho việc này:

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

Điều đó sẽ phù hợp với một ký tự chữ cái duy nhất. Nó cũng có vẻ làm việc cho UTF-8.

Để kiểm tra toàn bộ một chuỗi:

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

Hãy ghi nhớ điều này không chiếm không gian hoặc dấu chấm câu.

+0

Cảm ơn. Tôi đoán trong Ruby, bạn phải sử dụng RegEx. – sivabudh

+0

Bạn luôn có thể thêm phương thức 'String # isalpha?' Nếu bạn thích kiểu như Sergio gợi ý. – tadman

+1

Tôi không biết câu trả lời đúng như thế nào. [[: alpha:]] dành cho bảng chữ cái trong khi OP đã yêu cầu kiểm tra ký tự chữ và số. –

17

Bạn có thể cuộn của riêng bạn :) Thay thế alnum bằng alpha nếu bạn chỉ muốn khớp các chữ cái, không có số.

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

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

Hoặc để được nhiều hơn ruby-esque: '#alpha?'. – d11wtq

+0

@ d11wtq: tuyệt đối. Cảm ơn :) –

+1

'! Self.match (/ [^ [: alnum:]] /)' là đơn giản hơn. – steenslag

6

Hàm python chỉ hoạt động đối với ký tự ASCII; regex [[: alnum]] sẽ làm những thứ như "tëst" .alpha? => true. match/\w/ trận nhấn mạnh, do đó lá

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

để tạo lại hành vi Python.

+0

python 'isalpha' không hỗ trợ chuỗi với các chữ số – Anwar

+0

Điều này trả về' true' cho chuỗi rỗng nhưng phải trả về 'false'. – ma11hew28

Các vấn đề liên quan