2012-05-14 37 views
8

thể trùng lặp:
Test if a string is basically an integer in quotes using Ruby?Ruby: kiểm tra xem một chuỗi có thể được chuyển đổi sang một số nguyên

 
"1" 
"one" 

Chuỗi đầu tiên là một con số, và tôi chỉ có thể nói to_i để lấy một số nguyên.
Chuỗi thứ hai cũng là một số, nhưng tôi không thể gọi trực tiếp to_i để nhận số mong muốn.

Làm cách nào để kiểm tra xem tôi có thể chuyển đổi thành công bằng cách sử dụng to_i hay không?

Trả lời

19

Có một phương pháp Integer rằng không giống như to_i sẽ nâng cao một ngoại lệ nếu nó không thể chuyển đổi:

>> Integer "1" 
=> 1 
>> Integer "one" 
ArgumentError: invalid value for Integer(): "one" 

Tôi đoán bạn có thể sử dụng điều đó với một cấp cứu nội tuyến:

Integer(foo) rescue nil 

Nếu chuỗi của bạn có thể được chuyển đổi, bạn sẽ nhận được số nguyên, nếu không, nil (hoặc bất kỳ thứ gì khác bạn muốn đặt sau số rescue).

Phương pháp Integer là kiểm tra toàn diện nhất mà tôi biết trong Ruby (ví dụ: "09" sẽ không chuyển đổi vì số 0 đứng đầu làm cho số bát phân và 9 là số không hợp lệ) . Bao gồm tất cả những trường hợp này với biểu thức chính quy sẽ là một cơn ác mộng.

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