For web programming, numbers come in as strings. but to_i will convert \"5abc\" to 5 and \"abc\" to 0, both
Since at least Ruby 2.6, the kernel functions Integer, Float, etc. accept an exception keyword argument that does the job:
> Integer('42', exception: false)
=> 42
> Integer('x42', exception: false)
=> nil
> Integer('x42')
ArgumentError (invalid value for Integer(): "x42")
> Integer('', exception: false)
=> nil
> Integer('')
ArgumentError (invalid value for Integer(): "")
> Integer(nil, exception: false)
=> nil
> Integer(' 42 ', exception: false)
=> 42
> Integer(' 4 2 ', exception: false)
=> nil