How to validate that a string is a proper hexadecimal value in Ruby?
hex, regex, ruby
Solution
`!str[/\H/]` will look for invalid hex values.
Problem
I am writing a 6502 assembler in Ruby. I am looking for a way to validate hexadecimal operands in string form. I understand that the String object provides a "hex" method to return a number, but here's a problem I run into: ``` "0A".hex #=> 10 - a valid hexadecimal value "0Z".hex #=> 0 - invalid, produces a zero "asfd".hex #=> 10 - Why 10? I guess it reads 'a' first and stops at 's'? ``` You will get some odd results by typing in a bunch of gibberish. What I need is a way to first verify that the value is a legit hex string. I was playing around with regular expressions, and realized I can do this: ``` true if "0A" =~ /[A-Fa-f0-9]/ #=> true true if "0Z" =~ /[A-Fa-f0-9]/ #=> true <-- PROBLEM ``` I'm not sure how to address this issue. I need to be able to verify that letters are only A-F and that if it is just numbers that is ok too. I'm hoping to avoid spaghetti code, riddled with "if" statements. I am hoping that someone could provide a "one-liner" or some form of elegent code. Thanks!