【发布时间】:2013-12-22 14:35:51
【问题描述】:
我正在用 Ruby 编写一个 6502 汇编程序。我正在寻找一种以字符串形式验证十六进制操作数的方法。我知道 String 对象提供了一个“十六进制”方法来返回一个数字,但是我遇到了一个问题:
"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'?
你会通过输入一堆乱码得到一些奇怪的结果。我需要的是一种首先验证该值是否为合法十六进制字符串的方法。
我在玩正则表达式,并意识到我可以做到这一点:
true if "0A" =~ /[A-Fa-f0-9]/
#=> true
true if "0Z" =~ /[A-Fa-f0-9]/
#=> true <-- PROBLEM
我不确定如何解决这个问题。我需要能够验证字母是否只有 A-F,如果只是数字也可以。
我希望避免意大利面条式代码,其中充斥着“if”语句。我希望有人可以提供“单行”或某种形式的优雅代码。
谢谢!
【问题讨论】:
-
用
^$锚定你的模式,否则,零匹配,Z不需要匹配。true if "0Z" =~ /^[A-Fa-f0-9]+$/ -
@MichaelBerkowski:你应该把它作为答案。