Saya memiliki string, katakanlah '123'
, dan saya ingin mengubahnya menjadi integer 123
.
Saya tahu Anda bisa melakukannya some_string.to_i
, tetapi itu berubah 'lolipops'
menjadi 0
, yang bukan efek yang ada dalam pikiran saya. Saya ingin itu meledak di wajah saya ketika saya mencoba mengubah sesuatu yang tidak valid, dengan yang bagus dan menyakitkan Exception
. Kalau tidak, saya tidak bisa membedakan antara yang valid 0
dan sesuatu yang sama sekali bukan angka.
EDIT: Saya sedang mencari cara standar untuk melakukannya, tanpa tipu daya regex.
^
dan$
memiliki arti yang agak berbeda sebagai metachar dari pada kebanyakan rasa regexp lainnya. Anda mungkin bermaksud menggunakan\A
dan\Z
sebagai gantinya.\z
di tempat\Z
sebagai deskripsi untuk dikapitalisasi Z anchor adalah: - "Cocok mengakhiri string Jika string yang berakhir dengan baris baru, cocok sebelum baris baru." Ruby-doc.org/core-2.1.1/Regexp .htmlPerhatikan juga pengaruh yang diterima solusi saat ini pada parsing hex, octal, dan bilangan biner:
Dalam angka Ruby yang dimulai dengan
0x
atau0X
hex,0b
atau0B
biner, dan hanya0
oktal. Jika ini bukan perilaku yang diinginkan, Anda mungkin ingin menggabungkannya dengan beberapa solusi lain yang memeriksa apakah string cocok dengan pola terlebih dahulu. Seperti/\d+/
ungkapan reguler, dll.sumber
Perilaku tak terduga lainnya dengan solusi yang diterima (dengan 1,8, 1,9 ok):
jadi jika Anda tidak yakin apa yang sedang disampaikan, pastikan Anda menambahkan
.to_s
.sumber
Saya suka jawaban Myron tetapi menderita penyakit Ruby "Saya tidak lagi menggunakan Java / C # jadi saya tidak akan pernah menggunakan warisan lagi" . Membuka kelas apa pun bisa penuh dengan bahaya dan harus digunakan dengan hemat, terutama ketika itu bagian dari perpustakaan inti Ruby. Saya tidak mengatakan jangan pernah menggunakannya, tetapi biasanya mudah dihindari dan ada pilihan yang lebih baik, misalnya
Kemudian ketika Anda ingin menggunakan string yang bisa berupa angka, jelas apa yang Anda lakukan dan Anda tidak mengalahkan kelas inti apa pun, misalnya
Anda dapat menambahkan segala macam pemeriksaan lain di inisialisasi, seperti memeriksa angka-angka biner dll. Namun yang utama, adalah bahwa Ruby adalah untuk orang-orang dan bagi orang-orang berarti kejelasan . Memberi nama objek melalui nama variabelnya dan nama kelasnya membuat segalanya menjadi lebih jelas.
sumber
Saya harus berurusan dengan ini dalam proyek terakhir saya, dan implementasi saya mirip, tetapi sedikit berbeda:
sumber
Mungkin bukan cara terbersih untuk melakukannya, tetapi harus berhasil.
sumber
Re: jawaban Chris
Implementasi Anda memungkinkan hal-hal seperti "1a" atau "b2" melalui. Bagaimana dengan ini sebagai gantinya:
Output ini:
sumber
\z
di tempat\Z
sebagai deskripsi untuk dikapitalisasi Z anchor adalah: - "Cocok mengakhiri string Jika string yang berakhir dengan baris baru, cocok sebelum baris baru." Ruby-doc.org/core-2.1.1/Regexp .html